Mengranlin

Personal Website

Welcome


Effective TCP/IP Programming

这本书是读中文版Effective TCP/IP Programming所做的读书笔记

Effective TCP/IP Programming

Introduction

一、基本的Socket API回顾

  1. 通过socket系统调用获得一个socket, 系统调用函数的参数如下:

domain:

  • AF_INET用于网络
  • AF_LOCAL用于IPC

type(套接字类型):

  • SOCK_STREAM: 可靠、全双工的面向连接的字节流. 在TCP/IP中指的是TCP
  • SOCK_DGRAM: 不可靠、高效率的数据服务. 在TCP/IP中指的是UDP
  • SOCK_RAW: 可以访问IP层中的一些数据报, 可用于坚挺ICMP消息

protocol:

  • 指示socket使用哪个协议, 对于TCP/IP, 通常设置成0. 而对于RAW类型socket则有几个可能的协议
  1. 建立连接(connect), connect的参数如下:

s:

  • 系统调用获得的socket

peer:

  • 对端的地址和其他信息, 对于AF_INET, 这是一个sockaddr_in结构

peer_len:

  • peer指向的结构的大小
  1. 连接建立成功后, 就可以传输数据了:
  • UNIX: 可使用read/write函数, 这两个函数的参数是一样的, 重点说下里面跟系统相关的参数flag
  • Windows: recv/send函数, 参数也是一样的

flag:

  • MSG_OOB: 发送或读取; 紧急数据
  • MSG_PEEK: 读取; 可以重复读的(因为缓冲区里不删除该标记的数据)
  • MSG_DONTROUTE: 系统内核会忽略路由功能; 用于路由程序或诊断

在UDP中, 用于收发数据的函数是recfrom, sendto. 注意: 从函数名可知, UDP里的收发数据函数是可指定地址的.

network basises

  • mac addr: decide next step
  • 路由器:在不同网段之间转发数据

OSI

  • 应用层:是否产生网络流量
  • 表示层: 传输前是否进行加秘,压缩(开发人员决定)
  • 表示层的trick: 比如发送端、接收端的编码不一致导致的乱码问题就属于表示层的问题
  • 会话层: 可以查木马(后台进行),命令:netstat -nb
  • 传输层: 可靠传输、流量控制、不可靠传输
  • 网络层: 选择最佳路径,也可通过静态路由实现人工选择
  • 数据链路层: 定义数据帧的“开始”和“结束”,交换机看到“开始”和“结束”后可以正确的接收数据
  • 数据链路层: 透明传输、差错校验(不纠错,错了直接扔掉)
  • 物理层: 定义了网路设备的接口标准, 规定了电器标准
  • IPv4与IPv6的使用只是影响网络层的变化,每一层的变化不会影响其他层
  • MAC地址冲突, ADSL欠费, 网速没办法协商一致都属于数据链路层的问题
  • 网络排错:由底层到高层
  • ping,确定网络层有没有问题

网络安全

  • 数据链路层安全:ADSL,帐号密码,VLAN,交换机端口绑定MAC地址
  • 网络层安全:在路由器上使用ACL控制数据包流量
  • 应用层安全:开发的应用程序没漏洞

TCP/IP协议

  • 对OSI进行了简化

性能指标

  • 速率/bit rate: 主机在数字信道上传输数据__位数__的速率, 衡量数据传输的速度
  • 每一个通信都有一个信道,不同的信道,不同的速率
  • 带宽: 信道所支持的最大传输速率
  • 吞吐量: 单位时间内通过某个网络的总的数据量
  • 延时/时延: 发送时延(这个数据离开计算机的时间), 传播时延, 排队时延(等待处理), 处理时延(选择出口), 排队时延(出口处排队), 传播时延.
  • 有多少数据在线路上:带宽x时延
  • RTT: 从发送方发送数据开始到发送方收到接收方确认
  • 利用率: 利用率越高,时延越高

物理层

  • 确定传输媒体的接口特性(机械特性、电器特性、功能特性、过程特性), 标准化
  1. 数据通信的基础知识
  • 调制解调器:模/数转换。调制解调器转换成模拟信号后就可以通过广域网、公共电话网来传
  • 源系统->传输系统->目的系统
  • 数据: 运送消息的实体
  • 信号: 数据的电气的或电磁的表现
  • 模拟信号:连续信号
  • 数字信号:离散信号
  • 码元: 有电或没电的基本波形(一小段),其时间长度叫做码元长度. 二进制码元信号的一码元携带1bit的信息量. 想携带nbits的信息量就要要求一码元有n种取值.
  1. 信道
  • 单向通信(单工通信): 一个发送方,一个接收方;只能有一个方向的通信.
  • 双向交替通信(半双工通信): 通信双方都可以收发,但不能同时收发. eg: 小区保安对讲的时候,一个听、一个说.
  • 双向同时通信(全双工通信): 通信双方可以同时收发数据. eg: 打电话.
  • 基带信号: 来自信源的信号, 用于距离传输, 因为衰减不严重, 如打印机, 显示器.
  • 带通信号: 把基带信号经过调制后, 移到高频, 用于远距离传输.
  • 调制方法(调制解调器做的事): 调幅(AM)、调频(FM)、调相(PM)
  1. 数字信号的编码
  • 常用编码: 单极性不归零码、双极性不归零码、单极性归零码、双极性归零码、曼特思特编码、差分曼特斯特编码(通过有无跳变来确定0、1, 该编码的抗干扰能力强).
  1. 奈氏准则(无信号干扰):
  • 没干扰的情况下, 码元的传输速率也有个上限(为了避免码间串扰,有串扰就可能识别不出来了)
  • 适用于模拟信号的传输(从调制解调器到接收器之间的模拟信号的传输)
  1. 信噪比
  • 这是信息论中的内容, 信号和噪声的比例

香农公式(有信号干扰):

\[C=W log_{2}(1+S/N), b/s\] \[W: 信道带宽, Hz\] \[S: 信道内信号的平均功率\] \[N: 信道内部的高斯噪声功率\]
  • C是实际传输速率(噪声下)
  • W是极限传输速率
  • 噪声越大, 实际传输速率越小
  • 这个公式告诉我们的事实: 如果有噪声, 通过降低传输速率(C), 也能够让对方无差错的接收这个信息.
  • 既适用于数字信号的传输, 又适用于模拟信号的传输. 也就是说香农公式的适用范围比奈氏准则广

数据通信模型总结:

  • 数字信号->模拟信号->数字信号
  • 信道、单工、半双工、全双工
  • 基带信号、带通信号
  • 调制方法
  • 常用编码(基带信号)
  • 信道的极限容量(奈氏准则、香农公式)

物理层下面的传输媒体:

  • 导向传输媒体: 无屏蔽双绞线(utp, 计算机通信用的, 八根线)、屏蔽双绞线(stp)、同轴电缆(有线电视用的)
  • 网线: 水晶头里面有八根线, 线的顺序有要求的, 100M的没有都用, 用的1、3、2、6. 1000M的都用
  • 计算机和交换机之间连接用直通线, 两台计算机之间用交叉线连接. 规律:同类设备用交叉线连接,不同设备用直通线就行了
  • 记住直通线的线序
  • 无线传输:非导向传输媒体

集线器(hub):

  • 计算机通过网线和集线器连接, 集线器的作用: 可以放大信号, 不具备定向(hub收到A的信号后向其他所有计算机发信号), 跟网线差不多,有信号就转, 没有任何智能.
  • 集线器连的网不安全, 现在很少用集线器了,大部分用交换机.

信道复用技术(可以同时跑多个计算机数据,又可以正确的分开):

  • 频分复用(打电话): 不同频率放不同计算机数据, 然后传数据
  • 时分复用: 在时域上按顺序放各个计算机数据, 即各个时间段规律的放不同计算机数据. 原理: 随着时钟不停的转, 和不同的计算机接触, 就可以达到取、放不同计算机数据.
  • 时分复用可能会造成信道的浪费, 比如: 和A计算机接触后却发现A没数据, 那么这个时间段就浪费了. 因此有了统计时分复用, 在每个数据里加标记用以给数据标号.
  • 波分复用: 就是光的频分复用

数字传输系统:

  • PCM(脉码调制): 俩标准: E1,P1.
  • eg: 8000次采样, 一个码元8bits,就得到了8000x8 = 64k的带宽. E1: 就是将32路进行时分复用, 64k x 32就得到了带宽:2.48M. P1: 就是时分复用24路信号

宽带接入技术(接网):

  • ADSL(拨号上网): 非对称数字用户链路. 就是:低频打电话,高频上网(分离器的作用). 用DMT对高频信道进进一步的划分用以不同的作用(并行处理). 这里有个上行、下行的概念.
  • HFC(光线同轴混合网): 有线电视网、频带高
  • 光纤到户: 直接通过光纤

数据链路层:

  • 不关心物理层的事情
  • 信道类型: 点到点信道(俩设备)、广播信道(多设备)
  • 要区分链路和数据链路,链路是物理层面的,数据链路在此基础上还有协议
  • 数据链路层传的是帧
  • 数据链路层会给数据加帧头、帧尾、物理层地址和校验值

数据链路层要解决三个基本问题:

  • 封装成帧: 用特殊二进制符号标记帧头帧尾. 数据和结尾一样怎么办[误解], 在特殊字符前加转义字符ESC.
  • 透明传输: 收到数据后要去掉转义字符, 这就叫做透明传输.
  • 差错检测: 添加帧检验序列, 通过帧检验序列来检查帧是否有错.
  • 循环冗余检验算法(CRC): 得到帧检验序列; 数据补n位,除数n+1位, 除数随意选, 做不进位的加法, 得到的余数就是求得的帧检验序列(FCS). 解码时保持同样的除数, 做除法, 如果余数位0则认为无差错, 非0则有差错. 除数的位数越多, 检测能力越强, 也就是说该算法有可能出现: 有错检测不出来的情况.

P2P通信的数据链路层(广域网):

  • PPP协议: 数据链路层协议, 内部细分了三层. 以7E(01111110)开头/结束. 信息部分是整数字节.
  • 透明传输: 把7E变成7D和5E.

广播信道的数据链路层(局域网):

  • CSMA/CD: 满足这个协议的都是以太网
  • 多点接入、载波侦听、二进制指数类型退避算法
  • 集线器的特点: 带宽共享、不安全(可以抓包)、一般计算机距离集线器不超过100米

MAC层:

  • 48bits 二进制、全球唯一
  • 网卡能接收的三种帧:单播、广播、多播
  • 以太网MAC帧的帧格式(网络层过来的数据): 目的地址|源地址|类型|数据|FCS.
  • 以太网MAC帧的帧特点: 长度要求、发送两个MAC帧有个最小时间间隔9.6微秒

抓包工具:

  • Ethereal
  • ping用的是ICMP协议
  • 广播包指的是目标地址是全1, 中病毒的时候经常会发广播包

扩展以太网:

  • 距离扩展、数量扩展(集线器的集联)

优化以太网:

  • 网桥: 集线器之间通过网桥连接, 网桥通过自己的具体的一边接口和收到的包中的源地址[MAC地址]来判定发包的计算机在自己的哪一边[接口一侧], 不知到的让其通过.
  • 网桥的这种记录功能可以对包是否通过做决定, 简单点说网桥有隔离冲突的作用, 隔离大的冲突域.
  • 随着网桥的口越来越多, 它不接集线器了, 直接接计算机了, 这样, 网桥就变成了现在的交换机.
  • 交换机的另外一个特点是: 它是存储转发的, 不像集线器有了信号就转发.
  • 它的口可以把数据帧进行排队, 因此在A、C同时向B发数据时不会发生冲突; 另外, 计算机与交换机之间直接连接, 中间不会有其他计算机, 因此用交换机连接的网路是全双工的.
  • 还有一个特点就是: 带宽独享, 如: 口是100M的, 大家都是100M.
  • 现在组网基本都用交换机, 很少用集线器, 尤其是对局域网
  • 交换机的MAC地址表是动态更新的

总结:

  • 数据链路层: 封装成帧、透明封装、无差错接收、点到点线路的数据链路层(PPP协议)、广播信道的数据链路层(CSMA/CD)

网络层:

  • 网络层为传输层提供服务
  • 路由器负责在不同网段转发数据
  • 每个数据包都是单独选择路径的
  • 负责在不同网络之间尽力转发数据包, 不负责重传也不负责顺序

数据包在互联网中的传送:

  • 交换机用直通线连路由器
  • 一个网络里的计算机网络部分必须一样
  • 子网掩码显示哪部分是网络部分
  • 给计算机配IP的时候必须配网关, 同一个网络里的网关都一样
  • 配置广域网接口需要配置时钟频率

网络设备和OSI参考模型的关系:

  • 本网段通信:
  • 跨网段通信:

网络设备和OSI参考模型的关系:

  • 应用层准备数据
  • 传输层对数据进行分段
  • 网络层在数据段上加源IP地址、目标IP地址
  • 数据链路层写上数据链路层地址(mac地址); 目标mac地址分两种情况, 即同一网段和不同网段(使用自己的子网掩码判断自己在哪个网段, 再判断目标地址在哪个网段)
  • 如果同一个网段: 不用过路由器了, 直接使用arp协议广播解析目标地址的mac地址, 得到mac地址后直接封装
  • 如果不是一个网段: arp广播路由器的mac地址, 得到路由器的mac地址后直接封装
  • 物理层加上物理地址(物理层地址决定了下一跳)

网络层的ARP协议通过广播的方式解析对方计算机的mac地址

名字:

  • 传输层: 数据段
  • 网络层: 数据包
  • 数据链路层: 数据帧
  • 物理层: 比特流

加完物理地址后, 数据的准备工作就做好了. 接下来, 集线器(和网线一个级别、智商低、不做任何判断)负责将比特流传递过去. 交换机(能够看懂物理层地址, mac地址)收到比特流后再看目标mac地址, 然后决定从哪个口转发地址. 路由器收到数据帧之后先看mac地址以确定是不是发给自己的, 如果是, 把mac地址去掉, 然后根据数据包来选择路径(根据路由表选择出口), 并重新封装数据帧(加目标mac地址, 对于点对点链路, 目标mac地址是全F; 对于非点对点链路, 目标mac地 址就不一定了). 到达目标计算机后, 去除数据链路层地址(网络层去除)、物理层地址(传输层去除)、应用层再把数据穿成文件.

  • 接收端一层层的去地址—解封过程
  • 发送端一层层加地址—封装过程
  • 路由器、交换机不会中病毒(病毒代码在这些层被切成段了)

网络层协议:

  • ARP协议: 解析目标计算机的mac地址; 会给所有口发广播包, 然后就有相应的回应(注意: 不知道的时候才发广播包, 知道后就缓存起来了)
  • ARP只能解析本网段的, 并且广播是不能跨路由器的, 路由器会隔绝ARP广播.

position_c: video41

  • 查一下有没有类似于Cisco Packet Tracer这样的开源软件
  • 交换机的mac地址表怎么更新的呢
  • 配置路由表


转载请注明:Mengranlin » 点击阅读原文