TCP、UDP及IP协议总结

TCP协议常见知识linux

TCP协议特色 和 首部格式 

 

源端口(Source Port),目标端口(Destination Port) 各2字节面试

源端口号,标识主机上发起传送的应用程序;目的端口标识主机上传送要到达的应用程序。源端和目的端的端口号,用于寻找发端和收端应用进程。这两个值加上I P首部中的源端I P地址和目的端I P地址惟一肯定一个TCP链接。一个I P地址和一个端口号有时也称为一个插口(socket),插口对(socket pair)(包含客户I P地址、客户端口号、服务器 I P地址和服务器端口号的四元组 )可惟一肯定互联网络中每一个TCP链接的双方。IP+TCP端口惟一肯定一个TCP链接。算法

  TCP协议经过使用"端口"来标识源端和目标端的应用进程。 端口号可使用0到65535之间的任何数字。在收到服务请求时,操做系统动态地为客户端的应用程序分配端口号。在服务器端,每种服务在"众所周知的端口"(Well-Know Port)为用户提供服务。缓存

 

封包序号(Sequence Number) 4字节服务器

因为 TCP 封包必需要带入 IP 封包当中,因此若是 TCP 数据太大时(大于 IP 封包的允许程度), 就得要进行分段。这个 Sequence Number 就是记录每一个封包的序号,可让收受端从新将 TCP 的数据组合起来。网络

序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。socket

 

确认号(Acknowledge Number) 4字节分布式

为了确认主机端确实有收到咱们 client 端所送出的封包数据,咱们 client 端固然但愿可以收到主机方面的响应,那就是这个 Acknowledge Number 的用途了。 当 client 端收到这个确认码时,就可以肯定以前传递的封包已经被正确的收下了。这个号是指望收到对方的下一个报文段的数据的第一个字节的序号。学习

 

数据偏移(Data Offset)4比特测试

和IP数据包头部同样,也有个Options字段,长度是不固定的,而为了要确认整个TCP封包大小,就须要这个标志来讲明整个封包区段的起始位置。

这个字段指出TCP报文段的数据起始处距离 TCP报文段的起始处有多远。“数据偏移”的单位不是字节而是32bit字(4字节为计算单位)。

没有任何选项字段的TCP头部长度为20字节;最多能够有60字节的TCP头部。

 

保留字段(Reserved) 占6比特

保留为从此使用,但目前应置为0。

 

状态控制码(Code,Control Flag)

标志位字段(U、A、P、R、S、F):占6比特。各 比特的含义以下:

URG:紧急比特(urgent),当URG=1时,代表紧急指针字段有效,表明该封包为紧急封包。它告诉系统此报文段中有紧急数据,应尽快传送(至关于高优先级的数据), 且上图中的 Urgent Pointer 字段也会被启用。

ACK:确认比特(Acknowledge)。只有当ACK=1时确认号字段才有效,表明这个封包为确认封包。当ACK=0时,确认号无效。---TCP的3此握手后2次ACK=1的。

PSH:(Push function)若为1时,表明要求对方当即传送缓冲区内的其余对应封包,而无需等缓冲满了才送。

RST:复位比特(Reset) ,当RST=1时,代表TCP链接中出现严重差错(如因为主机崩溃或其余缘由),必须释放链接,而后再从新创建运输链接。

SYN:同步比特(Synchronous),SYN置为1,就表示这是一个链接请求或链接接受报文,一般带有 SYN 标志的封包表示『主动』要链接到对方的意思。。

FIN:终止比特(Final),用来释放一个链接。当FIN=1时,代表此报文段的发送端的数据已发送完毕,并要求释放运输链接。

 

滑动窗口(Window占2字节

窗口字段用来控制对方发送的数据量,能够告知对方目前自己有的缓冲器容量(Receive Buffer) 还能够接收封包。当 Window=0 时,表明缓冲器已经额满,因此应该要暂停传输数据。单位为字节。TCP链接的一端根据设置的缓存空间大小肯定本身的接收窗口大小,而后通知对方以肯定对方的发送窗口的上限,这个值是本机指望一次接收的字节数。

 

TCP校验和(Checksum)  占2字节

当数据要由发送端送出前,会进行一个检验的动做,并将该动做的检验值标注在这个字段上; 而接收者收到这个封包以后,会再次的对封包进行验证,而且比对原发送的 Checksum 值是否相符,若是相符就接受,若不符就会假设该封包已经损毁,进而要求对方从新发送此封包!在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。

 

紧急指针(Urgent Pointer)  占2字节

这个字段是在 Code 字段内的 URG = 1 时才会产生做用。能够告知紧急数据所在的位置(紧急指针指出在本报文段中的紧急数据的最后一个字节的序号)。

 

选项(Options长度可变。

TCP首部能够有多达40字节的可选信息,用于把附加信息传递给终点,或用来对齐其它选项。

目前此字段仅应用于表示接收端能够接收的最大数据区段容量,若此字段不使用, 表示可使用任意数据区段的大小。 这个字段较少使用。

TCP首部的主要选项:

最大报文段长度MSS(Maximum Segment Size)是TCP报文段中的数据字段的最大长度。MSS告诉对方TCP:“个人缓存所能接收的报文段的数据字段的最大长度是MSS个字节。”--

 

---注意:MSS应在保证IP层不分片的状况下尽可能大些,IP层若是收到的数据太大,会依据链路层的最大传送单元MTU(链路层的协议规定了一个数据帧中数据字段的最大长度),进行分片传输,而后接收方在进行组合,这是很耗费时间的。

 

填充字段(Padding)

如同 IP 封包须要有固定的 32bits 表头同样, Options 因为字段为非固定, 因此也须要 Padding 字段来加以补齐才行。一样也是 32 bits 的整数。

这是为了使整个首部长度是4字节的整数倍。

 

UDP协议的特色 和 首部格式  

 

 

TCPUDP的区别

  1.     TCP面向链接(read/write/send/recv),而UDP无链接(sendtorecvfrom)
  2.     TCP是可靠传输(超时重传+数据应答)UDP不可靠
  3.     TCP是点对点链接,UDP能够一对多的
  4.     TCP面向字节流,UDP面向数据报
  5.     TCPHTTP,HTTPS,FTPTELNETSMTP等使用,UDPDNSDHCPNFSIGMPTFTP

 

TCPUDPIP首部长度

TCP首部最小长度是20字节,最大是60字节

UDP只有8个字节

IP数据首部最小长度是20字节,最大是60字节

 

 

OSI模型TCP/IP模型

OSI7层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

TCP/IP层:网络接口层、网际层、运输层和应用层

5层协议:物理层、数据链路层、网络层、运输层和应用层

 

如何保持TCP的可靠传输

         超时重传机制 + 数据应答机制

 

中止等待协议的介绍

  1. 无差错-收到确认以后就进行下一次的发送
  2. 出现差错-在指定的时间内没有收到确认(超时计时器),进行从新发送

 

  1. 确认丢失 或者 确认迟到 确认丢失,超时后,发送方继续发送,接收方收到以后,不接收,可是会再发一条确认。确认迟到的话,发送方会再次发送,接收方收到以后,不接收,同时再次发送确认。

 

  1. 信道的利用率 利用率低,引入流水线型 连续ARQ协议

 

连续ARQ协议  

 

滑动窗口的介绍

  1. 正常状况下
  2. 未按序收到的状况下

 

 

 

  1. 滑动窗口为0的异常状况

持续计时器完成,发送一个零窗口的探测报文。

 

滑动窗口和缓存之间的关系

 

 

 

超时重传的时间选择

TCP采用了一种自适应算法,它记录一个报文段发出的时间,以及收到相应确认的时间,这两个时间之差就是报文段的往返时间RTT。TCP保留了RTT的加权平均RTTs。

 

选择确认SACK【主要注意最多只能提供四个连续块的(8个序号)】

若是要使用SACK那么在创建TCP链接时,就要在TCP的首部中加上容许SACK的选项字段,双方必须协商好,选择SACK后原来的ack依然有效,只是之后在TCP报文段的首部中都加上SACK选项,以便报告收到的不连续的字节块的边界。

边界信息每一个边界须要8个字节,而TCP首部选项长度最大是40个字节,因此最可能是4个字节块。

 

TCP的流量控制的实现(Nagle算法)

  1. 滑动窗口

         前面讲过

      2. 效率的问题 Nagle算法的思想(发送方)

 

      3. 糊涂症(接收方)

 

 

4个计时器

  1.  超时重传计时器,每次TCP发送一个数据后都要开启超时重传计时器,时间到了尚未收到确认就重传数据。
  2.  滑动窗口过程若是接收端的确认窗口是0,发送端不发送数据,怎么持续下去?TCP为每一个链接设置了一个持续计时器,只要收到对方的零窗口通知,就启动该计时器,时间到则发送0窗口探测报文段(仅携带1字节数据),接收端在确认报文中给出如今的窗口值便可。
  3.  保活计时器,客户端忽然发生故障,服务器端不能一直等着啊?TCP为每一个链接设置一个保活计时器,每次收到客户端的数据就更新保活计时器,时间设置通常是2小时,若2小时没有收到数据,就发送一个探测报文段,之后每隔75分钟发一次,连续10个探测报文段没响应,就关闭链接。
  4.  TCP挥手时主动关闭的一方会进入TIME-WAIT状态,关闭AB的链接后,A进入TIME-WAIT状态,等待B关闭到A的链接,这时用到了时间等待计时器,A会等待2MSL时间。MSL为最长报文段寿命,通常为2分钟。

零窗口

TCP规定,即便确认报文中窗口设置为0,也必须接收如下数据:零窗口探测报文段,确认报文段和携带紧急数据的报文段。

 

 

MTUMSL以及MSS

MSL:最长报文段寿命,通常2分钟,TCP链接释放时,主动方必须通过2MSL后才进入CLOSED状态,所以主动方关闭时间比较晚;

MSSTCP最大报文段(数据部分)传输长度,在TCP报文的首部中设置,能够经过getsockoptsetsockopt获取和设置TCP_MAXSEGMSS=TCP报文段长度-TCP首部长度;

MTU:数据链路层最大帧长度,IP层数据段不能大于MTU,不然分片传输,效率下降了,通常是1500字节。

 

TCP的拥塞(se)控制

  1. 和流量控制的区别

拥塞控制是防止网络的阻塞,流量控制是端到端的,防止发送方的数据不要发送的太快。

  1. 两种实现方式 和 触发的条件

2.1慢开始-拥塞避免 触发条件:确认没有按时收到,即只要发生超时重传

 

2.2 快重传-快恢复 收到连续三个相同的确认

 

 

  1. 为何快重传快恢复会更加的好

在调整的阶段,是变为阈值的大小,而不是从1开始,由于收到了连续三个相同的确认,表名当前网络很大多是良好的。

 

  1. 4.       滑动窗口的大小是怎么肯定的

根据拥塞窗口(cwnd)的大小 和 接收方给定的窗口(window)的大小肯定的,谁小就是谁。

 

TCP的三次握手

  1. 链接图

 

  1. 2.       为何须要第三次

防止已失效的请求报文在通过一段时间以后又到达了服务端。建立了新的链接。

  1. 3.       为何不用四次

和使用三次的效果是同样的。

  1. 4.       TCP三次握手存在什么样的缺陷,如何预防和改进

发起链接的一方不进行链接的确认,耗尽服务器的资源。

解决方法:缓存的方法,确认收到来自客户的ACK以后再进行建立TCB;Session的方式;防火墙

 

 

TCP的四次挥手

  1. 链接图

 

  1. 2.       为何握手须要三次,挥手却使用的是四次

a)         由于在服务端的ACK和FIN阶段是必须分开的,这是一个半链接的状态,服务端可能还会给客户端发送信息。

  1. 3.       为何要有TIME_WAIT状态,有何做用

a)         主动关闭方的最后一次确认可以正确的被对象收到。

b)         让本网络中的 已失效的链接请求报文段 在本链接中消失。

 

TCP的有限机状态[面试要求本身可以手动画出]

状 态

描 述

CLOSED

呈阻塞、关闭状态,表示主机当前没有活动的传输链接或正在进行传输链接

LISTEN

呈监听状态,表示服务器正在等待新的传输链接进入

SYN RCVD

表示主机已收到一个传输链接请求,但还没有确认

SYN SENT

表示主机已经发出一个传输链接请求,等待对方确认

ESTABLISHED

传输链接创建,通讯双方进入正常数据传输状态

FIN WAIT 1

(主动关闭)主机已经发送关闭链接请求,等待对方确认

FIN WAIT 2

(主动关闭)主机已收到对方关闭传输链接确认,等待对方发送关闭传输链接请求

TIMED WAIT

完成双向传输链接关闭,等待全部分组消失

CLOSING

双方同时尝试关闭传输链接,等待对方确认

CLOSE WAIT

(被动关闭)收到对方发来的关闭传输链接请求,并已确认

LAST ACK

(被动关闭)等待最后一个关闭传输链接确认,并等待全部分组消失

 

各层经常使用协议

OSI中的层

功能

TCP/IP协议族

应用层

文件传输,电子邮件,文件服务,虚拟终端

TFTP(69),HTTP(80),SNMP,FTP(21),SMTP(25),DNS(53),Telnet(23) 等等

表示层

数据格式化,代码转换,数据加密

没有协议

会话层

解除或创建与别的接点的联系

没有协议

传输层

提供端对端的接口

TCP,UDP

网络层

数据包选择路由

IP,ICMP,OSPF,EIGRP,IGMP

数据链路层

传输有地址的帧以及错误检测功能

SLIP,CSLIP,PPP,MTU

物理层

以二进制数据形式在物理媒体上传输数据

ISO2110,IEEE802,IEEE802.2

 

网络层特色

IP协议是网络层使用的协议,与之相关的还有ARP协议,ICMP协议,IGMP协议

注意:网络层只提供简单灵活的、无链接的、尽最大努力交付的数据报服务。

 

IP地址分类和特色

 

  1. A类地址

A类地址范围:1.0.0.0~126.255.255.255

A类地址网络号字段占据一个字节,只有7位可使用,可指派的网络号是126(2^7-2)个。减2的缘由是:IP地址网络段全为0表示this,意思是本网络;IP网络号127(01111111)保留做为本网络的换回测试本主机的进程之间的通讯。

A类地址主机号占3个字节,所以每一个A类网络的最大主机数是2^24-2.减2的缘由是:0的主机号字段表示该IP地址是本主机所链接到的单个A类网络地址。例如一个Ip地址是5.6.7.8那么其所在的网络地址是5.0.0.0,而全1表示全部的,1表示该网络上全部的主机。

  1. B类地址

B类地址128.1.0.0~191.255.255.255

  1. C类地址

C类地址192.0.1.0~223.255.255.255

  1. D类地址

D类地址224.0.0.0~239.255.255.255,多播地址,通常不用的

  1. 5.       E类地址

E类地址240.0.0.0~255.255.255.255,保留不用的

 

私网IP范围是:

10.0.0.0~10.255.255.255

172.16.0.0~172.31.255.255

192.168.0.0~192.168.255.255

 

 

 

 

子网掩码

子网掩码为前面是连续的1,而后全是0,为扩展IP使用范围,使用子网掩码技术,对网络进行更细划分获得子网,即和子网掩码与运算获得结果相同的属于一个子网。

注意:规定如今网络必须使用子网掩码,路由器中必须有这一行,这样已知IP地址和子网掩码只要进行与运算立刻就能够得出网络地址。

对划分子网的好理解,这样获得的是子网地址

对不划分子网的,规定必须使用默认子网掩码,默认子网掩码中1的位置和网络号字段net-id正好对应,所以获得的也是网络地址。好比A类假如某个公司没有划分子网那么默认子网掩码就是:0xff000000,这样与运算后确定是A类网络地址。0xffff0000同理是B类网络的默认子网掩码。

 

 

IP地址和MAC地址

 

 

 

ARP协议

ARP协议的用途是从网络层使用的IP地址解析出数据链路层使用的硬件地址。

注意:ARP是解决同一个局域网上的主机或路由器的IP地址和MAC地址的映射问题,不一样网络上的行不通的。

ARP过程:

 

 

IP协议首部字段

 

版本号:IP地址的版本号,通讯双方版本号必须一致

首部长度:占4个字节,最大15,注意其表示单位是4字节。即最大表示15个4字节

区分服务:通常不用

总长度:首部和数据长度之和

标识:IP软件维护一个计数器,每产生一个数据包,计数器加1,注意这里是IP分片时候使用的,当IP数据太多(大于MTU)须要分片时,每片的标识一致才能合并回来

标志:和分片有关,占3位,最低位MF=1标识后面还有分片,中间一位DF=1表示不能分片

片偏移:某片在原分组的位置,片偏移以8字节为一个单位

 

生存时间(TTL)代表该数据包在网络中的寿命,目的是防止没法交付的数据报在网络中兜圈子,TTL代表该数据包最多通过多少路由器,显然最大值是255,路由器在转发数据包以前把TTL1,若是为0这时就丢弃该数据包,显然若是TTL=1表示该报文只在本局域网中传输。

 

协议:指明此数据包携带的适何种协议的数据,如TCPUDPICMP等,目的主机判断后就可知道该交给谁了

 

首部校验和:只检查首部,不检查数据部分

 

路由器分组转发算法

 

 

ICMP协议特色

 

 


ICMP协议应用

traceroute指令

traceroute从源主机向目的主机发送一连串的IP数据包,数据包中封装的是不可交付的UDP数据包(使用非法的端口号)。第一个IP数据包P1TTL设为1,当第一个P1到达第一个路由器R1时,R1先收下它,而后把TTL1,因为TTL1后为0,这时丢弃该报文,同时向源主机发送ICMP时间超过差错报告报文。

 

 

 

 

面试:两台笔记本ping不通,你以为可能存在哪些问题?

答: (1)首先考虑是不是网络的问题

      (2)局域网设置问题,电脑互联是要设置的。看是否安装了必要的网络协议,最重要的是IP地址是否设置正确。

      (3)网卡驱动未安装正确

      (4)防火墙设置有问题

      (5)是否有什么软件阻止了ping包

linux下最简单的禁ping方法

首先登录服务器终端之间执行:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

这样就能够禁ping了。若是想恢复ping能够执行命令

echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

 

 

 

路由选择协议

1.路由器和交换机的区别?

交换机用于局域网,利用主机的MAC地址进行数据传输,而不须要关心IP数据包中的IP地址,它工做于数据链路层。路由器识别网络是经过IP数据包中IP地址的网络号进行的,因此为了保证数据包路由的正确性,每一个网络都必须有一个惟一的网络号。路由器经过IP数据包的IP地址进行路由的(将数据包递交给哪一个下一跳路由器)。路由器工做于网络层。因为设备如今的发展,如今不少设备既具备交换又具备路由功能,二者的界限愈来愈模糊。

 

2. 网桥的做用

网桥是一个局域网与另外一个局域网之间创建链接的桥梁。

 

3.路由表是作什么用的?在Linux环境中怎么配置一条默认路由?

路由表是用来决定如何将一个数据包从一个子网传送到另外一个子网的,换句话说就是用来决定从一个网卡接收到的包应该送到哪个网卡上去。路由表的每一行至少有目标网络号、子网掩码、到这个子网应该使用的网卡这三条信息。当路由器从一个网卡接收到一个包时,它扫描路由表的每一行,用里面的子网掩码与数据包中的目标IP地址作逻辑与运算(&)找出目标网络号。若是得出的结果网络号与这一行的网络号相同,就将这条路由表六下来做为备用路由。若是已经有备用路由了,就载这两条路由里将网络号最长的留下来,另外一条丢掉(这是用无分类编址CIDR的状况才是匹配网络号最长的,其余的状况是找到第一条匹配的行时就能够进行转发了)。如此接着扫描下一行直到结束。若是扫描结束仍没有找到任何路由,就用默认路由。肯定路由后,直接将数据包送到对应的网卡上去。在具体的实现中,路由表可能包含更多的信息为选路由算法的细节所用。

在Linux上能够用“route add default gw<默认路由器 IP>”命令配置一条默认路由。

 

  1. 4.       每一个路由器在寻找路由时须要知道哪5部分信息?

目的地址:报文发送的目的地址

邻站的肯定:指明谁直接链接到路由器的接口上

路由的发现:发现邻站知道哪些网络

选择路由:经过从邻站学习到的信息,提供最优的到达目的地的路径

保持路由信息:路由器保存一张路由表,它存储所知道的全部路由信息。

 

  1. 5.       IGP,RIP,OSPF,EGP介绍

答:(1)IGP:内部网关协议,即在一个自治系统内部使用的路由选择协议,如RIP和OSPF。

              (11)RIP是一种分布式的基于距离向量的路由选择协议,要求网络中的每个路由器都要维护从它本身到其余每个目的网络的距离向量。距离便是跳数,路由器与直接相连的网络跳数为1,之后每通过一个路由器跳数加1RIP容许一条路径最多包含15个路由器,所以当距离为16时认为不可达,这由于如此限制了网络的规模,说明RIP只能工做在规模较小的网络中。RIP的三个要点:仅和相邻路由器交换信息;交换的信息是当前路由器知道的所有信息,即路由表;按固定的时间间隔交换路由信息,如30秒。RIP协议使用运输层的用户数据报UDP进行传送,所以RIP协议的位置位于应用层,可是转发IP数据报的过程是在网络层完成的。RIP是好消息传播的快,坏消息传播的慢。

              12OSPF:最短路径优先,三个要点:采用洪泛法向本自治系统的路由器发送信息;发送的信息就是与本路由器相邻的全部路由器的链路状态,但这只是路由器所知道的部分信息;只有当链路状态发生变化时,路由器才用洪泛法向全部路由器发送此信息。OSPF直接使用IP数据包传送,所以OSPF位于网络层。

       EGP:外部网关协议,若源站和目的站处在不一样的自治系统中,当数据报传到一个自治系统的边界时,就须要使用一种协议将路由选择信息传递到另外一个自治系统中,如EGP。

相关文章
相关标签/搜索