以太⽹帧格式、IP报⽂格式、TCPUDP报⽂格式
tcp ip协议规定1、ISO开放系统有以下⼏层:
7应⽤层
6表⽰层
5会话层
4传输层
3⽹络层
2数据链路层
1物理层
2、TCP/IP ⽹络协议栈分为应⽤层(Application)、传输层(Transport)、⽹络层(Network)和链路层(Link)四层。
通信过程中,每层协议都要加上⼀个数据⾸部(header),称为封装(Encapsulation),如下图所⽰
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在⽹络层叫做数据报(datagram),在链路层叫做帧(frame)。数
据封装成帧后发到传输介质上,到达⽬的主机后每层协议再剥掉相应的⾸部,最后将应⽤层数据交给应⽤程序处理。
其实在链路层之下还有物理层,指的是电信号的传递⽅式,⽐如现在以太⽹通⽤的⽹线(双绞线)、早期以太⽹采⽤的的同轴电缆(现在主要⽤于有线电视)、光纤等都属于物理层的概念。
3、集线器(Hub)是⼯作在物理层的⽹络设备,⽤于双绞线的连接和信号中继(将已衰减的信号再次放⼤使之传得更远)。
交换机是⼯作在链路层的⽹络设备,可以在不同的链路层⽹络之间转发数据帧(⽐如⼗兆以太⽹和百兆以太⽹之间、以太⽹和令牌环⽹之间),由于不同链路层的帧格式不同,交换机要将进来的数据包拆掉链路层⾸部重新封装之后再转发。
路由器是⼯作在第三层的⽹络设备,同时兼有交换机的功能,可以在不同的链路层接⼝之间转发数据包,因此路由器需要将进来的数据包拆掉⽹络层和链路层两层⾸部并重新封装。
4、⽹络层的IP 协议是构成Internet 的基础。IP 协议不保证传输的可靠性,数据包在传输过程中可能丢失,可靠性可以在上层协议或应⽤程序中提供⽀持。
传输层可选择TCP 或UDP 协议。TCP 是⼀种⾯向连接的、可靠的协议,有点像打电话,双⽅拿起电话
互通⾝份之后就建⽴了连接,然后说话就⾏了,这边说的话那边保证听得到,并且是按说话的顺序听到的,说完话挂机断开连接。也就是说TCP 传输的双⽅需要⾸先建⽴连接,之后由TCP 协议保证数据收发的可靠性,丢失的数据包⾃动重发,上层应⽤程序收到的总是可靠的数据流,通讯之后关闭连接。UDP 协议不⾯向连接,也不保证可靠性,有点像寄信,写好信放到邮筒⾥,既不能保证信件在邮递过程中不会丢失,也不能保证信件是按顺序寄到⽬的地的。使⽤UDP 协议的应⽤程序需要⾃⼰完成丢包重发、消息排序等⼯作。
5、数据传输经过的各层协议过程如下
以太⽹驱动程序⾸先根据以太⽹⾸部中的“上层协议”字段确定该数据帧的有效载荷(payload,指除去协议⾸部之外实际传输的数据)是IP、ARP 还是RARP 协议的数据报,然后交给相应的协议处理。假如是IP 数据报,IP 协议再根据IP ⾸部中的“上层协议”字段确定该数据报的有效载荷是TCP、UDP、ICMP 还是IGMP,然后交给相应的协议处理。假如是TCP 段或UDP段,TCP 或UDP 协议再根据TCP ⾸部或UDP ⾸部的“端⼝号”字段确定应该将应⽤层数据交给哪个⽤户进程。IP 地址是标识⽹络中不同主机的地址,⽽端⼝号就是同⼀台主机上标识不同进程的地址,IP 地址和端⼝号合起来标识⽹络中唯⼀的进程。
虽然IP、ARP 和RARP 数据报都需要以太⽹驱动程序来封装成帧,但是从功能上划分,ARP 和RARP 属于链路层,IP 属于⽹络层。虽然ICMP、IGMP、TCP、UDP 的数据都需要IP 协议来封装成数据报,但是从功能上划分,ICMP、IGMP 与IP 同属于⽹络层,TCP 和UDP属于传输层。
6、以太⽹帧格式
(1)其中的源地址和⽬的地址是指⽹卡的硬件地址(也叫MAC 地址),长度是48 位,是在⽹卡出⼚时固化的。
(2)注意⽹卡芯⽚(例如DM9000A)收到的数据就是如上所⽰的⼀长串数据;其中包括以太⽹帧头、IP报报头、传输层协议段头、应⽤层所需数据。
(3)以太⽹帧中的数据长度规定最⼩46 字节,最⼤1500 字节,ARP 和RARP 数据包的长度不够46 字节,要在后⾯补填充位。最⼤值1500 称为以太⽹的最⼤传输单元(MTU),不同的⽹络类型有不同的MTU,如果⼀个数据包从以太⽹路由到拨号链路上,数据包度⼤于拨号链路的MTU了,则需要对数据包进⾏分⽚fragmentation)。ifconfig 命令的输出中也有“MTU:1500”。注意,MTU 个概念指数据帧中有效载荷的最⼤长度,不包括帧⾸部的长度。
7、IP数据报格式
IPv4:
IP 数据报的⾸部长度和数据长度都是可变长的,但总是4 字节的整数倍。对于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 位。
8、UDP段格式
UDP 协议不⾯向连接,也不保证传输的可靠性。
9、TCP段格式
(1)序号:指出段中的数据部分在发送⽅数据流中的位置。
确认号:指出接收⽅希望收到对⽅下次发送的数据的第⼀个字节的序号。
TCP段⾸部的定长部分为20个字节,即5个单位的长度。
URG位:紧急标志,和紧急指针配合使⽤,当其为1时表⽰,此报⽂要尽快传送。ACK位:确认标志,
和确认号字段配合使⽤,当ACK位置1时,确认号字段有效。PSH位:为推送标志,置1时,发送⽅将⽴即发送缓冲区中的数据。
RST位:复位标志,置1时,表明有严重差错,必须释放连接。
SYN位:同步标志,置1时,表⽰请求建⽴连接。
FIN位:终⽌标志,置1时,表明数据已经发送完,请求释放连接。
窗⼝⼤⼩:32bit,⽤于向对⽅通告当前本机的接受缓冲区的⼤⼩。
校验和字段长度:16bit,校验范围包括段⾸部、数据以及伪⾸部。
(2)TCP数据传输过程
(3)TCP连接的建⽴
建⽴连接的过程:
【1】. 客户端发出段1,SYN 位表⽰连接请求。序号是1000,这个序号在⽹络通讯中⽤作临时的地址,每发⼀个数据字节,这个序号要加1,这样在接收端可以根据序号排出数据包的正确顺序,也可以发现
丢包的情况,另外,规定SYN 位和FIN 位也要占⼀个序号,这次虽然没发数据,但是由于发了SYN 位,因此下次再发送应该⽤序号1001。mss表⽰最⼤段尺⼨,如果⼀个段太⼤,封装成帧后超过了链路层的最⼤帧长度,就必须在IP 层分⽚,为了避免这种情况,客户端声明⾃⼰的最⼤段尺⼨,建议服务器端发来的段不要超过这个长度。
【2】服务器发出段2,也带有SYN 位,同时置ACK 位表⽰确认,确认序号是1001,表⽰“我接收到序号1000 及其以前所有的段,请你下次发送序号为1001 的段”,也就是应答了客户端的连接请求,同时也给客户端发出⼀个连接请求,同时声明最⼤尺⼨为1024。
【3】客户端发出段3,对服务器的连接请求进⾏应答,确认序号是8001。
在这个过程中,客户端和服务器分别给对⽅发了连接请求,也应答了对⽅的连接请求,其中服务器的请求和应答在⼀个段中发出,因此⼀共有三个段⽤于建⽴连接,称为'''三⽅握⼿(three-way-handshake)'''。在建⽴连接的同时,双⽅协商了⼀些信息,例如双⽅发送序号的初始值、最⼤段尺⼨等。
(4)TCP数据传输过程
【1】客户端发出段4,包含从序号1001 开始的20 个字节数据。
【2】服务器发出段5,确认序号为1021,对序号为1001-1020 的数据表⽰确认收到,同时请求发送序号1021 开始的数据,服务器在应答的同时也向客户端发送从序号8001 开始的10 个字节数据,这称为piggyback。
【3】客户端发出段6,对服务器发来的序号为8001-8010 的数据表⽰确认收到,请求发送序号8011 开始的数据。
在数据传输过程中,ACK 和确认序号是⾮常重要的,应⽤程序交给TCP 协议发送的数据会暂存在TCP 层的发送缓冲区中,发出数据包给对⽅之后,只有收到对⽅应答的ACK 段才知道该数据包确实发到了对⽅,可以从发送缓冲区中释放掉了,如果因为⽹络故障丢失了数据包或者丢失了对⽅发回的ACK 段,经过等待超时后TCP 协议⾃动将发送缓冲区中的数据包重发。
(5)TCP连接的关闭
【1】客户端发出段7,FIN 位表⽰关闭连接的请求。
【2】服务器发出段8,应答客户端的关闭连接请求。
【3】服务器发出段9,其中也包含FIN 位,向客户端发送关闭连接请求。
【4】客户端发出段10,应答服务器的关闭连接请求。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论