你知道网络协议之TCP/IP?

现代科技的发展如此之快,移动支付、网络购物、视频直播等各种应用层出不穷,但是这些应用的背后,却有着一个共同的基石做支撑,那就是互联网。而之所以人人都可以接入互联网,标准的网络协议是必不可少的。在互联网发展之初,国际化标准组织iso定制了一套国际标准osi(开放式通信系统互联参考模型),在该标准中,网络协议被分为了七层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。然而现已成为业界标准协议的tcp/ip协议,并未完全按照osi模型的七层结构来实现,而是分成了网络接口层、网际层、传输层、应用层四个层次。而事实也证明,四个层次的划分就已经能够非常好的适应现代互联网协议的需求了。
tcp/ip协议并不是一个协议,而是一系列协议的总称,只是用了其中两个应用最广泛的协议名称来统称这个协议簇了。那么接下来就让我们一起了解一下这个tcp/ip协议簇。
上图是一个tcp/ip协议的基本框架,当有一个http请求发生时,数据从应用层依次传递给传输层、网际层、网络接口层,并在每一层打包上自己的首部,最终通过电信号传送出去。接收端接收到数据包后,再以相反的顺序解包并依次上传,最终到达应用层去解析http数据。
下面就以浏览器访问云汉社区网站的一帧数据包为例,了解一下tcp/ip协议。
该数据帧总的结构如图所示:
接下来分别了解一下各个部分的结构。
以太网数据包格式为:首部(14字节)+数据(46~1500字节)+4字节crc
首部固定为14个字节,包含了目标mac地址、源mac地址和数据报类型,mac地址是一个48位(6字节)的物理地址,网卡在出厂时固定死的。
ip数据报格式:
ip 数据报的首部长度和数据长度都是可变长的,但总是4 字节的整数倍,一般为20字节。
对于ipv4,4 位版本字段是4。4 位首部长度的数值是以4 字节为单位的,最小值为5,也就是说首部长度最小是4x5=20 字节,也就是不带任何选项的ip 首部,4 位能表示的最大值是15,也就是说首部长度最大是60 字节。8 位tos 字段有3 个位用来指定ip 数据报的优先级(目前已经废弃不用),还有4 个位表示可选的服务类型(最小延迟、最大呑吐量、最大可靠性、最小成本),还有一个位总是0。总长度是整个数据报(包括ip 首部和ip 层payload)的字节数。每传一个ip 数据报,16 位的标识加1,可用于分片和重新组装数据报。3 位标志和13 位片偏移用于分片。ttl(time to live)是这样用的:源主机为数据包设定一个生存时间,比如64,每过一个路由器就把该值减1,如果减到0 就表示路由已经太长了仍然找不到目的主机的网络,就丢弃该包,因此这个生存时间的单位不是秒,而是跳(hop)。协议字段指示上层协议是tcp、udp、icmp 还是igmp。然后是校验和,只校验ip 首部,数据的校验由更高层协议负责。ipv4的ip 地址长度为32 位。
ip数据报承载的内容最常见的是udp和tcp两种数据段,首先来看一下udp段。
udp 协议不面向连接,也不保证传输的可靠性。但是因为数据段结构简单,应用也非常广泛。
接下来重点分析一线tcp段,tcp段首部通常也是20字节。
序号:指出段中的数据部分在发送方数据流中的位置。
确认号:指出接收方希望收到对方下次发送的数据的第一个字节的序号。
tcp段首部的定长部分为20个字节,即5个单位的长度。
urg位:紧急标志,和紧急指针配合使用,当其为1时表示,此报文要尽快传送。
ack位:确认标志,和确认号字段配合使用,当ack位置1时,确认号字段有效。
psh位:为推送标志,置1时,发送方将立即发送缓冲区中的数据。
rst位:复位标志,置1时,表明有严重差错,必须释放连接。
syn位: 同步标志,置1时,表示请求建立连接。
fin位:终止标志,置1时,表明数据已经发送完,请求释放连接。
窗口大小:32bit,用于向对方通告当前本机的接受缓冲区的大小。
校验和字段长度:16bit,校验范围包括段首部、数据以及伪首部。
tcp的传输过程:
建立连接的过程:
【1】. 客户端发出段1,syn 位表示连接请求。
【2】 服务器发出段2,也带有syn 位,同时置ack 位表示确认。
【3】 客户端发出段3,对服务器的连接请求进行应答。
在这个过程中,客户端和服务器分别给对方发了连接请求,也应答了对方的连接请求,其中服务器的请求和应答在一个段中发出,因此一共有三个段用于建立连接,称为'''三方握手(three-way-handshake)'''。在建立连接的同时,双方协商了一些信息,例如双方发送序号的初始值、最大段尺寸等。
tcp数据传输过程:
【1】  客户端发出段4,包含n 个字节数据。
【2】  服务器发出段5,确认数据收到,服务器在应答的同时也向客户端发送数据。
【3】  客户端发出段6,对服务器发来的数据表示确认收到。
在数据传输过程中,ack 和确认序号是非常重要的,应用程序交给tcp 协议发送的数据会暂存在tcp 层的发送缓冲区中,发出数据包给对方之后,只有收到对方应答的ack 段才知道该数据包确实发到了对方,可以从发送缓冲区中释放掉了,如果因为网络故障丢失了数据包或者丢失了对方发回的ack 段,经过等待超时后tcp 协议自动将发送缓冲区中的数据包重发。
tcp连接的关闭
【1】  客户端发出段7,fin 位表示关闭连接的请求。
【2】  服务器发出段8,应答客户端的关闭连接请求。
【3】  服务器发出段9,其中也包含fin 位,向客户端发送关闭连接请求。
【4】  客户端发出段10,应答服务器的关闭连接请求。
建立连接的过程是三方握手,而关闭连接通常需要4 个段(四次握手),服务器的应答和关闭连接请求通常不合并在一个段中,因为有连接半关闭的情况,这种情况下客户端关闭连接之后就不能再发送数据给服务器了,但是服务器还可以发送数据给客户端,直到服务器也关闭连接为止。

新能源车关键技术难题待解
夏季变频器的维护保养
realme X50 5G高清图集
翡翠绿版魅蓝手机高清图赏
美国初创公司Knowledge利用利用区块链技术建立了一个新广告平台
你知道网络协议之TCP/IP?
多格式支持:无缝高清矩阵切换器的灵活应用
光缆接续盒跟光纤终端盒一样吗?两者怎么区分呢?
适合听歌看电影的蓝牙耳机有哪些,兼容性好的蓝牙耳机
华为出手,转向海思联发科芯片,高通不得不低头示好
华为:云原生2.0可以叫云二代吗?
苹果或将发布新款,iPad Pro现有型号供应有限
蓝牙耳机什么牌子好?国产蓝牙耳机最好的牌子推荐
工业交换机的冗余电源设计
西龙村农网改造工程,服务乡村振兴
RCEP正式签署,对光伏行业有什么影响?
Python程序员初学者和进阶者有什么区别
FRAM在自动驾驶技术中的应用是怎样的
【GTC2023】AI 和元宇宙时代的开发者大会
过流保护一般包括哪几种 过流保护电路继电器结构原理图