TCP/IP协议族的四个层次

 

TCP/UDP的概念


TCP和UDP协议是TCP/IP 协议的核心

TCP:传输控制协议(Transmission Control Protocol),是一种面向连接的、可靠的、基于字节流的传输层通信协议。由IETF的RFC 793定义。

UDP:用户数据报协议(User Datagram Protocol),是一种面向连接的、可靠的、基于字节流的传输层通信协议。由IETF的RFC 793定义。

TCP与UDP的区别


1,TCP是面向链接的协议,而UDP是无连接的协议;

2,TCP协议的传输是可靠的,而UDP协议的传输“尽力而为”;

3,TCP协议可以实现流控,而UDP不行;

4,TCP可以分段,而UDP不行;

5,TCP消耗资源较大,传输效率较低;UDP耗费资源较小,速度快。

面向连接 --- 在正式传输数据之前,先适用预先的协议,建立点到点的链接。

                    TCP建立的连接实际建立了一个双向的会话连接,即通讯双方都可以向对方发送数据

可靠 --- 确认,重传,排序,流控

        TCP提供可靠的服务,通过TCP连接传送的数据,无差错,不丢失,不重复且按序到达。               UDP尽最大努力交付,即不保证可靠交付。

流控 --- 滑动窗口机制(窗口不是数据包,也是按照字节数来计算)

        实现流控的过程(有升有降,试探极限):假如A一次性发送3个数据包,B收到后回一个ACK=1,ACKN=4,Win=3(B能够接受的窗口值),A为了提高效率,会把发送给B的窗口值调大,等B的回复,若B能够处理,则回复Win=调大后的数值,A再次向上调大,以此类推;若B不能处理,则回复Win=B能接受的数值。所以处理流量不会是一个固定值,而是会一直处于一个试探方式。     

TCP和UDP的使用场景


TCP协议更适用于对可靠性要求较高,但是对传输效率和资源占用要求较低的场景;UDP更适用于对传输效率要求较高,可靠性要求较低的场景(即时类通讯)。

 封装与解封装图

 

TCP的头部(TCP与UDP只有头部需要加参数)


序号(32位):在数据传输的过程中确保数据的顺序,标识数据段的数据。

确认序号(32):当A向B发送请求序号后,B表示收到并让A继续发送下一个序号(可以回一个相同序号的同时,再回下一个序号;也可以直接回下一个序号)

选项:在首部可有内容,也可以无内容。 --- 有了可选项,TCP协议的长度就不是固定的。

首部长度:TCP的头部又叫可变长头部,所以首部长度对区分其头部很重要

标记位:保留后的六格代表一位二进制(0/1),标记位致0表示该标记未被激活,标记位置1表示该标记已被激活

URG : 紧急标记位(占1位)。此标记位置1代表有此数据包当中有紧急处理的内容,与此同时紧急指针会激活。这段紧急需要处理的内容会放在数据的最前端,而紧急指针则在此处标记需要紧急处理的这段内容的结尾处,用来让紧急处理数据与普通处理的数据进行分隔。
ACK : 确认标记位(占1位)。此标记位置1代表是我的数据包是一个确认数据包,与此同时确认序号会被激活。
PSH :传送标记位(占1位)。在TCP协议当中,数据分段拆分成多个数据包,当所有数据包过去后,TCP协议会有一个缓存空间,将所有数据包收集起来,按照序号进行排序,将完整的数据包排列好后才会进行传输,而此标记位置1代表数据包不需要在缓存空间中进行排序,而是直接将数据包进行处理。
RST : 强制断开标记位(占1 位)。此标记位置1的数据包,将不经过四次回挥手的过程,直接断开TCP的连接。
SYN :请求标记位(占1位)。此标记为置1代表请求建立连接。
FIN : 结束标记位(占1位)。此标记为置1代表请求断开连接。

窗口大小(16位):窗口值是多少,就相当于一次性发多少个数据包,只须确认一次。
校验和(16位):确保数据完整性(TCP中校验被称为伪头部校验 --- 除了校验传输层头部和数据内容外,还会将网络层头部中的12字节的内容一起进行校验。)

        12字节的内容包括:32位源IP地址,32位目标IP地址,8位保留字段,8位协议字段,16位总长度(数据+头部)---反码相加法

 TCP头部长度最短20字节(1字节=8位)

传输层的TCP协议最大段长度:

MSS --- 最大段长度 --- 1460字节 --- 该值会在TCP协议的前两次握手中进行协商,取二者较小的。

UDP头部


UDP头部长度8字节

 1,TCP是面向链接的协议,而是无连接的协议;

TCP的三次握手----TCP建立连接的过程


*需要注意的是:
不要将确认序号Ack与标志位中的ACK搞混了。
确认方Ack=发起方Seq+1,两端配对。

 

 1、A发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接。(SYN=1,seq=x,x为随机生成数值);
2、B回复A发送的TCP连接请求报文,其中包含seq序列号,是由回复端随机生成的,并且将SYN置为1,而且会产生ACK字段(确认序号ACK Number),ACK字段数值是在A发送过来的序列号seq的基础上加1进行回复,以便A收到信息时,知晓自己的TCP建立请求已得到验证。(SYN=1,ACK=x+1,seq=y,y为随机生成数值)这里的ack加1可以理解为是确认和谁建立连接;
3、A收到B发送的TCP建立验证请求后,会使自己的序列号加1表示,并且再次回复ACK验证请求,在B发过来的seq上加1进行回复。(SYN=1,ACK=y+1,seq=x+1)。

TCP的四次挥手----TCP会话的断开


1、客户端发送断开TCP连接请求的报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中的FIN字段置为1,表示需要断开TCP连接。(FIN=1,seq=x,x由客户端随机生成);
2、服务端会回复客户端发送的TCP断开请求报文,其包含seq序列号,是由回复端随机生成的,而且会产生ACK字段,ACK字段数值是在客户端发过来的seq序列号基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP断开请求已经得到验证。(FIN=1,ACK=x+1,seq=y,y由服务端随机生成);
3、服务端在回复完客户端的TCP断开请求后,不会马上进行TCP连接的断开,服务端会先确保断开前,所有传输到A的数据是否已经传输完毕,一旦确认传输数据完毕,就会将回复报文的FIN字段置1,并且产生随机seq序列号。(FIN=1,ACK=x+1,seq=z,z由服务端随机生成);
4、客户端收到服务端的TCP断开请求后,会回复服务端的断开请求,包含随机生成的seq字段和ACK字段,ACK字段会在服务端的TCP断开请求的seq基础上加1,从而完成服务端请求的验证回复。(FIN=1,ACK=z+1,seq=h,h为客户端随机生成)至此TCP断开的4次挥手过程完毕

#理解在四次挥手数据的传输过程中,序号并不是单纯的加1,要把该数据包中包含的字节数,也就是数据量给考虑进去,x表示所包含数据中第一个字节的序号(列如:发送一个数据包,有1000字节,被划分为三个数据段,x+300为下一个数据段中第一个字节的序号

 

 三次握手与四次挥手,为什么挥手要多一次?

其实正常的断开和连接都是需要四次:
A发消息给B
B反馈给A表示正确收到消息
B发送消息给A
A反馈给B表示正确收到消息。
但是连接中,第二步和第三步是可以合并的,因为连接之前A和B是无联系的,所以没有其他情况需要处理。而断开的话,因为之前两端是正常连接状态(有数据传输),所以第二步的时候不能保证B之前的消息已经发送完毕,所以不能马上告诉A要断开的消息。这就是连接为什么可以少一步的原因。

IP协议


4位版本:IPV4或者IPV6
4位首部长度:标识头部总长度,用来区分从数据的开始和结尾。
8位服务类型:对需要做特殊处理的数据包标记,并对特殊标记的数据包进行特殊处理。
16位总长度:头部长度 + 数据长度
*16位标识:数据包分出来的所有片,每一片都有一个相同的标识。
*3位标志:
         1,Reserved bit --- 保留位                                                                                                                 2,Don't fragment --- 没有分片,没有分片置1,分片置0
         3,More fragments --- 更多地片,不是最后一片永远置1,是最后一片置0
*13位片偏移:
8位生存时间:数据包每经过一次路由器的转发,TTL值将会减1,当TTL值为0时,路由器将不会转发该数据,直接将数据包丢弃。
8位协议:上层所使用的协议类型
TCP的协议号:6        UDP的协议号:17        ICMP的协议号:1
16位首部校验和:只校验头部内容。

 IP协议最短头部长度 --- 20字节

IP的分片和TCP的分段     

MTU --- 最大传输单元 --- 默认值1500字节 (可改)

MSS --- 最大段长度 --- 理论值1460字节,这个值需要进行协商,这个参数在TCP的SYN包携带,如果双方不一致,则将按照小的执行。

数据链路层  --- MAC地址


在数据链路层完成封装是由以太网协议来完成封装。
以太网:早期局域网的解决方案,依靠MAC地址进行寻址的网络,是工作在1,2层的一种网络。
以太网协议的帧结构:--- 以太网Ⅱ型帧 --- 目前最常用的Destination Address表示为为目标MAC地址


Source Addrss表示为为源MAC地址
Type表示为上层所使用的协议类型
Preamble表示为前导符 --- 固定格式的一段01 --- 目的:方便识别数据帧的开始和结束
FCS表示为帧校验序列 --- 检验数据的完整性
Data表示为数据

物理层  --- 不需要封装

 

                        

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值