TCP/IP协议基础知识整理

TCP/IP协议的传输流程

在这里插入图片描述

TCP数据段格式

在这里插入图片描述TCP传送的数据单元称为报文段,TCP报文段既可以用来运载数据,又可以用来建立连接,释放连接和应答,一个TCP报文段分为首部和数据部分,整个TCP报文段作为IP数据报的数据封装在IP数据报中,其首部的前20B是固定的,TCP首部最短为20B,后面有4N字节是根据需要而增加的选项,长度为4B的整数倍。
TCP的全部功能体现在其首部的各个字段中,各字段意义如下:
(1) 源端口和目的端口: 各占2B,端口是传输层与应用层的服务接口,运输层的复用和分用功能都要通过端口实现。
(2) 序号: 占4B,范围0~2(32)-1,共2(32)个序号,TCP是面向字节流的(即TCP传送时是逐个字节传送的),所以TCP连接传送的字节流中的每个字节都要按顺序编号,序号字段的值指的是本报文段所传送的数据的第一字节的序号。
(3) 确认号:占4B,是期待收到对方下一个报文的第一数据字段的序号,若确认号为N,则表明到序号N-1为所有数据都已正确收到。
例如,B正确收到了A发送过来的一个报文段,其序号字段是501,而数据长度是200B(序号501~700),这表明B正确收到了A发送的到序号700为止的数据,因为B期望收到A的下一个数据序号701,于是B在发送给A的确认报文段中把确认号置为701
(4) **数据偏移(即首部长度)😗*占4位,这里不是IP数据报分片的那个数据偏移,而是表示首部长度(首部中还有长度不确定的选项字段),它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。“数据偏移”的单位32位(以4B为计算单位),由于4位二进制能表示的最大值为15,因此TCP首部的最大长度为60B。
(5)**保留:**占6位,保留为今后使用,但目前应置为0。
(6)紧急位URG。当URG=1时,表明紧急指针字段有效,它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优优先级的数据)。但URG需要和首部中紧急指针字段配合使用,即数据从第一个字节到紧急指针所指字节就是紧急数据。
(7)确认位ACK,仅当ACK=1时确认字段才有效。当ACK=0时,确认号无效,TCP规定,在连接建立后所有传送的报文段都必须把ACK置为1。
(8) 推送位PSH(push)。接收方TCP收到PSH=1的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。
(9) 复位位RST(Reset) 。当RST=1时,表明TCP连接中出现严重差错(如主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
(10) 同步位SYN。当SYN=1时表示这是一个连接请求或连接接受报文。
当SYN=1,ACK=0时,表明这是一个连接请求报文,对方若同意建立连接,则应在响应报文中使用SYN=1,ACK=1。
(11) 终止位FIN(Finish)。用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。
(12) 窗口。占2B,范围为0~2(16)-1,它指出现在允许对方发送的数据量,接收方的数据缓存空间是有限的,因此用窗口值作为接收方设置其发送窗口的依据。
例如,设确认号是701,窗口字段是1000。这表明,从701号算起,发送此报文段的一方还有接收1000字节数据(字节序号为701~1700)的接收缓存空间。
(13)校验和。占2B。校验和字段检验的范围包括首部和数据两部分。在计算校验和时,和UDP一样,要在TCP报文段的前面加上12B的伪首部(只需将UDP伪首部的第4个字段,即协议字段的17改成6,其他的和UDP一样)。
(14) 紧急指针。占2B。紧急指针仅在URG=1时才有意义,它指出在本报文段中紧急数据共有多少字节(紧急数据在报文段数据的最前面)。
(15) 选项。长度可变,TCP最初只规定了一种选项,即最大报文段长度(Maximum Segment Size,MSS)。MSS是TCP报文段中的数据字段的最大长度(注意仅仅是数据字段)。
(16)填充。这是为了使整个首部长度是4B的整数倍。

TCP连接管理

TCP是面向连接的协议,因为每个TCP连接都有三个阶段:连接建立,数据传送,连接释放。TCP连接的管理就是使运输连接的建立和释放都能正常进行。
TCP连接建立的过程中,要解决以下三个问题:
(1) 要使每一方能够通知对方的存在。
(2)要允许双方协商一些参数(如最大窗口值,是否使用窗口扩大选项,时间戳选项及服务质量等)。
(3) 能够对运输实体资源(如缓存大小,连接表中的项目等)进行分配。
每条TCP连接唯一地被通信的两个端口(即两个套接字)确定。

TCP连接的建立

在这里插入图片描述
连接建立前,服务器进程处于LISTEN(收听)状态,等待客户的连接请求。
第一步:客户端的TCP首先向服务器的TCP发送连接请求报文字段。这个特殊报文段的首部中的同步SYN置为1,同时选择一个初始序号seq=x。TCP规定,SYN报文段不能携带数据,但要消耗一个序号。这是TCP客户进程进入SYN-SENT(同步已发送)状态
第二步: 服务端的TCP收到连接请求报文段后,如同意建立连接,则向客户端发回确认,并为该TCP连接分配缓存和变量。在确认报文段中,把SYN位和ACK位都置1,确认号是ACK=x+1,同时也为自己选择一个初始序号seq=y,注意,确认报文段不能携带数据,但也要消耗掉一个序号。这时,TCP服务器进入SYN-RCVD(同步收到)状态。
第三步: 当客户机收到确认报文段后,还要向服务器给出确认,并为该TCP连接分配缓存和变量。确认报文段的ACK位置1,确认号ack=y+1,序号seq=x+1。该报文段可以携带数据,若不携带数据则不消耗序号,这时,TCP客户进程进入ESTABLISHED(已建立连接)状态。
成功进行以上三步后,就建立了TCP连接,接下来就可以传送应用层数据,TCP提供的是全双工通信,因此通信双方的应用进程在任何时候都能发送数据。

注意:服务端的资源是在完成第二次握手时分配的,而客户端的资源是在完成第三次握手时分配。这使得服务器易收到SYN洪泛攻击。

TCP连接的释放

TCP连接释放的过程通常称为四次握手。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

TCP可靠传输

TCP的任务是在IP层不可靠的,尽力而为服务的基础上建立一种可靠数据传输服务。
(1)**序号:**TCP首部的序号字段用来保证数据能有序提交给应用层,TCP把数据视为一个无结构但有序的字节流,序号建立在传送的字节流,而不是建立在报文段之上。
(2)TCP首部的确认号是期望收到对方的下一个报文段的数据的第一个字节的序号。
(3)重传
有两种事件会导致TCP对报文段进行重传:超时和冗余ACK。

超时

在这里插入图片描述

冗余ACK(冗余确认)

在这里插入图片描述

TCP流量控制

TCP提供流量控制服务来消除发送方(发送速率太快),使接收方缓存区溢出的可能性,因此可以说流量控制是一个速度匹配服务(匹配发送方的发送速率与接收方的读取速率)。
TCP提供一种基于滑动窗口协议的流量控制机制,在通信过程中,接收方根据接收缓存的大小,动态地调整发送方的发送窗口大小,这称为接收方窗口rwnd,即调整TCP报文报文首部中"窗口"字段值,来限制发送注入报文的速率,同时,发送方根据其对当前网络拥塞程度估计而确定的窗口值,这称为拥塞窗口cwnd,其大小与网络的带宽和时延密切有关。
在这里插入图片描述
在这里插入图片描述

传输层和数据链路层的流程控制的区别是:

在这里插入图片描述

TCP拥塞控制

在这里插入图片描述
注意:
这里假设接收接收方总是有足够大的缓存空间,因而发送窗口大小由网络的拥塞程度决定,也就是说,可以将发送窗口等同于为拥塞窗口。

慢开始和拥塞避免

在这里插入图片描述
在这里插入图片描述

注意执行慢开始算法目的是使发送拥塞的路由器有足够时间把队列中积压的分组处理完在这里插入图片描述

快速重传和快恢复

在这里插入图片描述
在这里插入图片描述

UDP数据报文格式

在这里插入图片描述
UDP数据报包含两部分:UDP首部和用户数据。UDP首部有8B,由4个字段组成,每个字段的长度都是2B。
各个字段含义如下:
(1)源端口。源端口号。在需要对方回信时选用,不需要时可用全0。
(2)目的端口,目的端口号,这在终点交付报文时必须使用到。
(3)长度,UDP数据报的长度(包括首部和数据),其最小值是8(仅有首部)。
(4)校验和。检测UDP数据报在传输中是否有错,有错就丢弃,该字段是可选的,当源主机不想计算校验和时,则则直接令该字段为全0。
在这里插入图片描述
注意:
(1) 校验时,若UDP数据报部分的长度不是偶数个字节,则需填入一个全0字节,但是此字节和伪首部一样,是不发送的。
(2) 如果UDP校验和校验出UDP数据报是错误的,那么可以丢弃,也可以交付给上层,但是需要附上错误报告,即告诉上层这是错误的数据报。
(3)通过伪首部,不仅可以检查源端口号,目的端口号和用户数据报的数据部分,还可以检查IP数据报的源地址和目的地址。

IP数据报的格式

在这里插入图片描述
一个IP分组是由首部和数据部分组成。首部前一部分的长度固定,共20B,是所有IP分组必须具有的。在首部固定部分的后面是一些可选字段,其长度可变,用来提供错误检测及安全等机制。
IP首部的部分重要字段含义如下:
(1) 版本。指IP协议的版本,目前最广泛使用的版本号为4。
(2)首部长度,占4位,可以表示的最大十进制数是15。以32位为单位,最大值为60B(15x4B)。最常用的首部长度是20B,此时不使用任何选项(即可选字段)。
(3)总长度。占16位。指首部和数据之和的长度,单位为字节,因此数据报的**最大长度为2(16)-1=65535B。**以太网的最大传送单元(MTU)为1500B,因此当一个IP数据报封装成帧时,数据报的总长度(首部加数据)一定不超过下面的数据链路层的MTU值。
(4)标识。占16位。它是一个计数器,每个产生一个数据报就加1,并赋值给标识字段,但它并不是"序号"(因为IP是无连接服务)。当一个数据报的长度超过网络的MTU时,必须分片,此时每个数据报文都复制一次标识号,以便能正确重装成原来的数据(重组的依据)。
(5)标志。占3位,标志字段的最低位为MF,MF=1表示后面还有分片,MF=0表示最后一个分片。标志字段中间的一位DF,只有DF=0时才允许分片
(6) 片偏移。占13位。它指出较长的分组在分片后,某片在原分组中的相对位置,片偏移以8个字节为偏移单位,除最后一个分片外,每个分片的长度一定是8B的整数倍。
(7) 生存时间(TTL)。占8位。数据报在网络中可通过路由器数的最大值,标识分组在网络中的寿命,以确保分组不会永远在网络中循环。路由器在转发分组前,先把TTL减1。若TTL被减为0,则该分组必须被丢弃。
(8)协议。占8位,指出此分组携带的数据使用何种协议,即分组数据部分应上交给哪个协议处理,如TCP,UDP等。其中值6为TCP,值为17表示UDP。
(9) 首部校验和,占16位,首部校验和只校验分组的首部,而不校验数据部分。
(10) 源地址字段,占4B,标识发送方的IP地址。
(11)目的地址字段,占4B,标志接收方的IP地址。

注意:在IP数据报首部中有三个关于长度的标记,首部长度,总长度,片偏移,基本单元分别为4B,1B,8B。

**分片:**一个链路层数据报能承载的最大数据量称为最大传送单元(MTU),因为IP数据报被封装在链路层数据报中,因此链路层的MTU严格限制着IP数据报的长度。当IP数据报的总长度大于链路MTU时,就需要将IP数据报中的数据分装在多个较小的IP数据报中,这些较小的数据报称为片。
**重组:**目的主机使用IP首部中的标识,标志和片偏移字段来完成对片的重组,即形成的每个数据报(片)都具有原始数据报的标识号。
案例:
在这里插入图片描述
除了最后一个片外,其他所有片中的有效载荷都是8的倍数,偏移值的单位是8B,1480=185x8。

VLAN基本概念与基本原理

一个以太网是一个广播域,当一个以太网包含的计算机太多时,往往会导致:
(1) 以太网中出现大量的广播帧,特别是经常使用的ARP和DHCP协议等。
(2) 一个单元的不同部门共享一个局域网,对信息保密和安全不利。
通过虚拟局域网(Virtual LAN),可以把一个较大的局域网分割成一些较小的与物理无关的逻辑上的VLAN,而每个VLAN是一个较小的广播域。
802.3ac标准定义了支持VLAN的以太网帧格式的扩展,它在以太网帧中插入一个4字节的标识符(插入在源地址字段和类型字段之间),称为VLAN标签,用来指明发送该帧的计算机属于那个虚拟局域网。插入VLAN标签的帧称为802.1Q帧,由于VLAN帧的首部增加了4字节,因此以太网的最大帧从原来的1518字节变为1522字节。
在这里插入图片描述
VLAN标签的前两个字节置为0x8100,表示这是一个802.1Q帧,在VLAN标签的后两个字节中,前4位没有用,后12位是该VLAN的标识符VID,它唯一标识了该802.1Q帧属于那个VLAN。12位的VID可识别4096个不同的VLAN。插入VID后,802.1Q帧的FCS必须重新计算。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值