Internet 上使用的一个关键的低层协议是网际协议,通常称IP协议。我们利用一个共同遵守的通信协议,从而使 Internet 成为一个允许连接不同类型的计算机和不同操作系统的网络。要使两台计算机彼此之间进行通信,必须使两台计算机使用同一种语言。通信协议正像两台计算机交换信息所使用的共同语言,它规定了通信双方在通信中所应共同遵守的约定。
它提供了能适应各种网络硬件的灵活性,对底层网络硬件几乎没任何要求,任何一个网络只要能够从一个地点向另一个地点传送二进制数据,即可使用IP协议加入互联网络了。
IP协议提供了一组数据报文服 务,每组分组报文都是由网络独立处理和分发,就像寄送 快递包裹一样,为了实现这个功能,每个IP报文必须包 含一个目的地址的字段;就像我们寄送快递都需要写明收 件人信息,但是和我们寄送快递一样,也可能会出现包裹 丢失问题,所以IP协议只是一个“尽力而为”的协议,在网 络传输过程中,可能会发生报文丢失、报文顺序打乱,重 复发送的情况。
UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。(这里不做重点讲解)
当应用程序用T C P传送数据时,数据被送入协议栈中, 然后逐个通过每一层直到被当作一串比特流送入网络。其 中每一层对收到的数据都要增加一些首部信息 。
TCP四层网络模型:
传输层:包括用于协作IP数据在已有网络介质上传输的协议。实际上TCP/IP标准并不定义与ISO数据链路层和物理层相对应的功能。相反,它定义像地址解析协议(Address Resolution Protocol,ARP)这样的协议,提供TCP/IP协议的数据结构和实际物理硬件之间的接口。
网络层:本层包含IP协议、RIP协议(Routing Information Protocol,路由信息协议),负责数据的包装、寻址和路由。同时还包含网间控制报文协议(Internet Control Message Protocol,ICMP)用来提供网络诊断信息。
数据链路层:它提供两种端到端的通信服务。实现网卡接口的网络驱动,以处理数据在以太网线等物理媒介上的传输
物理层:因特网的应用层协议包括Finger、Whois、FTP(文件传输协议)、Gopher、HTTP(超文本传输协议)、Telent(远程终端协议)、SMTP(简单邮件传送协议)、IRC(因特网中继会话)、NNTP(网络新闻传输协议)等。
简单理解:(寄快递为例)
传输层:选择快递公司(选择协议tcp头)
网络层:快递要寄送的目的地(ip)
数据链路层:快递要寄给的接受人(mac头)
物理层:开始派发快递(数据传输)
由于TCP协议是一种可信的传输协议,所以在传输之 前,需要通过三次握手建立一个连接,所谓的三次握手, 就是在建立TCP链接时,需要客户端和服务端总共发送3 个包来确认连接的建立
第一次:消息发送中,A随机选取一个序列号作为自己的初始序号发送给B;
第二次:消息B使用ack对A的数据包进行确认,因为已经收到了序列号为x的数据包,准备接收序列号为x+1的包,所以ack=x+1,同时B告诉A自己的初始序列号,就是seq=y;
第三次:消息A告诉B收到了B的确认消息并准备建立连接,A自己此条消息的序列号是x+1,所以seq=x+1,而ack=y+1是表示A正准备接收B序列号为y+1的数据包。
四次挥手表示 TCP 断开连接的时候,需要客户端和服务端 总共发送 4 个包以确认连接的断开;客户端或服务器均可 主动发起挥手动作(因为 TCP 是一个全双工协议),在 socket 编程中,任何一方执行 close() 操作即可产生挥手操作。
第一次挥手:A设置Sequence Number和Acknowledgment Number,向B发送一个FIN报文段;此时,A进入FIN_WAIT_1状态;这表示A没有数据要发送给B了;
第二次挥手:B收到了A发送的FIN报文段,A回一个ACK报文段,Acknowledgment Number为Sequence Number加1;A进入FIN_WAIT_2状态;B告诉A,我也没有数据要发送了,可以进行关闭连接了;
第三次挥手:B向A发送FIN报文段,请求关闭连接,同时B进入CLOSE_WAIT状态;
第四次挥手:A收到B发送的FIN报文段,B发送ACK报文段,然后A进入TIME_WAIT状态;B收到A的ACK报文段以后,就关闭连接;此时,A等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,A也可以关闭连接了。
滑动窗口(Sliding window)是一种流量控制技术。早期的 网络通信中,通信双方不会考虑网络的拥挤情况直接发送 数据。由于大家不知道网络拥塞状况,同时发送数据,导 致中间节点阻塞掉包,谁也发不了数据,所以就有了滑动窗口机制来解决此问题;发送和接受方都会维护一个数据 帧的序列,这个序列被称作窗口 。
简单解释下,发送和接受方都会维护一个数据帧的序列, 这个序列被称作窗口。发送方的窗口大小由接受方确定, 目的在于控制发送速度,以免接受方的缓存不够大,而导 致溢出,同时控制流量也可以避免网络拥塞。下面图中的 4,5,6 号数据帧已经被发送出去,但是 未收到关联的 ACK , 7,8,9 帧则是等待发送。可以看出发送端的窗口大 小为 6 ,这是由接受端告知的。此时如果发送端收到 4 号 ACK ,则窗口的左边缘向右收缩,窗口的右边缘则向右扩 展,此时窗口就向前 “ 滑动了 ” ,即数据帧 10 也可以被发 送。
就是发送端允许连续发送的幀的序号表。 发送端可以不等待应答而连续发送的最大幀数称为发送窗 口的尺寸。
接收方允许接收的幀的序号表,凡落在 接收窗口内的幀, 接收方都必须处理,落在接收窗口外的幀被丢弃。 接收方每次允许接收的幀数称为接收窗口的尺寸。
滑动窗口演示地址
学处咕泡学院