关于TCP/IP协议的总结

计算机网络体系结构

关于TCP/IP协议的总结

关于数据的封装:

关于TCP/IP协议的总结

IP协议

(这里讲的是IP的第4个版本,应记为IPv4)

与IP协议配套使用的还有三个协议;

  • 地址解析协议ARP(IP要使用这个协议)
  • 网际控制报文协议ICMP(要使用IP协议)
  • 网际组管理协议IGMP(要使用IP协议)
    关于TCP/IP协议的总结

利用IP协议就可以使性能各异的网络在网络层上看来好像是一个统一的网络,
一个IP地址在整个互联网范围内是唯一的,定义为:{<网络号>,<主机号>}
常见的三种类别的IP地址:

  • A类地址:网络号占一个字节,只有7位可供使用,但可指派的网络号是(2^7-2)个。因为网络号全为0的IP地址是个保留地址,全为1即127(01111111)保留作为本地环回测试,即目的地址为环回地址的IP数据报永远不会出现在任何网络上,因为网络号为127的地址根本不是个网络地址。关于TCP/IP协议的总结
  • B类地址:B类网络地址可指派的网络数为(2^14-1),因为128.0.0.0是不指派的。关于TCP/IP协议的总结
  • C类地址:C类网络地址可指派的网络数为(2^21-1),因为192.0.0.0是不指派的。关于TCP/IP协议的总结
    上述三种类型的网络可指派的主机数都要-2,因为要扣除全0和全1的主机号

一个网络指具有相同网络号net-id的主机的集合

地址解析协议ARP:把IP地址解析成硬件地址

  • IP地址和下面网络的硬件地址之间由于格式不同而不存在简单的映射关系(例如IP地址有32位,而局域网的硬件地址是48位),此外,在一个网络上经常会有新的主机加入进来或撤走主机。地址解析协议ARP解决这个问题的办法是在主机ARP高速缓存中放一个从IP地址到硬件地址的映射表,且这个映射表时常动态更新。

ARP工作机制:ARP是解决同一个局域网上的主机或路由器的地址映射问题

  • 每一台主机都设有一个ARP高速缓存
  • 当主机A向主机B发送数据时,先在ARP高速缓存中查看有无主机B的IP地址?
  • 若有,则查出其对应的硬件地址然后把其写入MAC帧,再通过局域网发送。
  • 若无,ARP进程在本局域网上广播发送一个ARP请求分组------>本局域网上所有主机上运行的ARP进程都接受到此ARP请求分组------>若主机X的IP地址与ARP请求分组中要查询的IP地址一致,就收下这个ARP请求分组,并向主机A发送ARP响应分组(ARP响应分组是普通的单播)

由于两级IP地址不够灵活,空间利用率不理想等原因,两级IP地址在本单位内部就变成为三级IP地址{<网络号>,<子网号>,<主机号>}
从IP数据报的首部无法看出源主机或目的主机所连接的网络是否进行了子网的划分,所以要使用子网掩码进行判断。

  • A类地址的默认子网掩码是:255.0.0.0
  • B类地址的默认子网掩码是:255.255.0.0
  • C类地址的默认子网掩码是:255.255.255.0

传输控制协议TCP

  • TCP是面向连接点对点的提供可靠交付全双工通信面向字节流运输层协议
  • TCP连接的端点叫做套接字(socket)或插口,socket =(IP地址:端口号)
  • TCP连接::= {socket1,socket2}

TCP可靠传输的工作原理及实现

假设A向B发送分组M1

停止等待协议:每发送完一个分组就停止发送,等待对方的确认,在收到确认后再 发送下一个分组。

即 A向B发送M1----->B回复A“我收到了M1”----->A收到B的确认后再发送M2。

  • 超时重传:B收到的M1有错误,就丢弃了M1,或B给A发送的确认信号丢失了,A长时间没有收到B的确认,就重新发送M1。A要保留M1的副本,在收到B的确认后才能清除。

上述的可靠传输协议常称为自动重传请求ARQ,明显一个分组一个分组的发送会降低信道利用率,为了提高传输效率,就采用了流水线传输,这里就定义了一个发送窗口,它表示位于窗口内的m个分组都可以连续发送出去,而不需要等待对方的确认。

连续ARQ协议和滑动窗口

  • 发送方每收到一个确认,接收方一般采用累积确认,即对按序到达的最后一个分组发送确认,假设总共发送了m个分组,该确认是对第n个分组的确认(n<m),则窗口向前滑动n个分组,再接着从头发送窗口内的分组。

TCP的流量控制

所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接受。

  • 利用滑动窗口实现流量控制:利用可变的窗口进行流量的控制,发送方的发送窗口不能超过接收方给出的接受窗口的数值。

TCP的拥塞控制

若对网络中某一资源的需求超过了该资源能提供的可用部分,网络的性能就要变坏,这种情况就叫做拥塞。

所谓拥塞控制就是防止过多的数据注入到网络中,拥塞控制是一个全局性的问题,涉及到所有的主机、所有的路由器以及与降低网络传输性能有关的所有因素,而流量控制就是一个端到端的问题。

TCP的拥塞控制方法:

当网络发生拥塞时,路由器就要丢弃分组,就会出现超时重传,而现在的通信线路的传输质量一般都很好,所以判断网络拥塞的依据就是出现了超时。

发送方让自己的发送窗口等于拥塞窗口,假设初始门限值ssthresh为16。

  • 慢开始:由于不清楚网络的负荷情况,就由小增大拥塞窗口的数值,增大指加倍增大,1–>2,2–>4……
  • 拥塞避免:当拥塞窗口的指增大到16时,就采用拥塞避免,一次窗口值增加1,即“加法增大”,若在某一刻发生超时,记此时拥塞窗口的大小为24,即判断发生拥塞,调整门限值ssthresh =24/2=12,重新进行慢开始……
    关于TCP/IP协议的总结
  • 快重传:要求接收方接收到报文段时立即发送确认信号,不管该报文段是否正确,若发送方对同一个报文一连收到三个确认信号,记3-ACK,如图中点4,则代表发生了个别报文段的丢失。
    关于TCP/IP协议的总结
  • 快恢复:还是上图中的点4,发现了丢失报文段后,不启动慢开始,而是执行快恢复算法,这时发送方调整门限值ssthresh=16/2=8,并开始执行拥塞避免算法。

TCP建立连接

“三次握手”

  • 第一次:客户发送SYN=1,代表请求建立连接,及初始序号seq=x;
  • 第二次:服务器发送ACK=1,ack=x+1,代表确认号,及初始序号seq=y,表示你确认要建立连接?
  • 第三次:客户发送ACK=1,ack=y+1,seq=x+1表示我确认要建立连接。
  • 然后成功建立连接双方可以相互发送数据了。

为什么客户最后还要发送一次确认呢?这主要是为了防止已经失效的连接请求报文段突然又传到了服务端而产生错误。

“已经失效的连接请求报文段”:指A发给B连接请求,但由于在某个网络节点长时间滞留,以至于A后来发送的连接请求成功并且数据交换完毕已经释放连接了,这个连接请求才到达,B就误认为又是一次连接请求。

TCP的连接释放
“四次挥手”

  • 第一次:客户发送FIN=1,代表请求释放连接,及初始序号seq=u;
  • 第二次:服务器发送ACK=1,ack=u+1,代表确认号,及初始序号seq=v,表示你确认要释放连接?
  • 第三次:服务器发送FIN=1,ACK=1,ack=u+1,seq=w,表示我要释放连接了,再见。
  • 第四次:客户发送ACK=1,ack=w+1,seq=u+1表示你释放连接吧,再见。
  • 然后服务器释放连接进入CLOSED状态,客户端要等一会儿再释放连接进入CLOSED状态

为什么最后客户端要等一会再CLOSED状态呢?原因有二;
第一,为了保证最后一个ACK能够到达服务器,如果这个报文丢失了,服务器又会发送一个“我要释放连接了,再见”的信号,然后客户可以再发个ACK确认。
第二,防止“已经失效的连接请求报文段”出现在本连接中,客户端等待的这一会儿可以使本连接持续时间内产生所有的报文段从网络中消失。

参考书籍:《计算机网络》(第7版) 谢希仁 编著