TCP协议常见知识linux
源端口(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字节的整数倍。
TCP和UDP的区别
TCP、UDP、IP首部长度
TCP首部最小长度是20字节,最大是60字节
UDP只有8个字节
IP数据首部最小长度是20字节,最大是60字节
OSI模型TCP/IP模型
OSI是7层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
TCP/IP层:网络接口层、网际层、运输层和应用层
5层协议:物理层、数据链路层、网络层、运输层和应用层
如何保持TCP的可靠传输
超时重传机制 + 数据应答机制
中止等待协议的介绍
连续ARQ协议
滑动窗口的介绍
持续计时器完成,发送一个零窗口的探测报文。
滑动窗口和缓存之间的关系
超时重传的时间选择
TCP采用了一种自适应算法,它记录一个报文段发出的时间,以及收到相应确认的时间,这两个时间之差就是报文段的往返时间RTT。TCP保留了RTT的加权平均RTTs。
选择确认SACK【主要注意最多只能提供四个连续块的(8个序号)】
若是要使用SACK那么在创建TCP链接时,就要在TCP的首部中加上容许SACK的选项字段,双方必须协商好,选择SACK后原来的ack依然有效,只是之后在TCP报文段的首部中都加上SACK选项,以便报告收到的不连续的字节块的边界。
边界信息每一个边界须要8个字节,而TCP首部选项长度最大是40个字节,因此最可能是4个字节块。
TCP的流量控制的实现(Nagle算法)
前面讲过
2. 效率的问题 Nagle算法的思想(发送方)
3. 糊涂症(接收方)
4个计时器
零窗口
TCP规定,即便确认报文中窗口设置为0,也必须接收如下数据:零窗口探测报文段,确认报文段和携带紧急数据的报文段。
MTU和MSL以及MSS
MSL:最长报文段寿命,通常2分钟,TCP链接释放时,主动方必须通过2MSL后才进入CLOSED状态,所以主动方关闭时间比较晚;
MSS:TCP最大报文段(数据部分)传输长度,在TCP报文的首部中设置,能够经过getsockopt和setsockopt获取和设置TCP_MAXSEG,MSS=TCP报文段长度-TCP首部长度;
MTU:数据链路层最大帧长度,IP层数据段不能大于MTU,不然分片传输,效率下降了,通常是1500字节。
TCP的拥塞(se)控制
拥塞控制是防止网络的阻塞,流量控制是端到端的,防止发送方的数据不要发送的太快。
2.1慢开始-拥塞避免 触发条件:确认没有按时收到,即只要发生超时重传
2.2 快重传-快恢复 收到连续三个相同的确认
在调整的阶段,是变为阈值的大小,而不是从1开始,由于收到了连续三个相同的确认,表名当前网络很大多是良好的。
根据拥塞窗口(cwnd)的大小 和 接收方给定的窗口(window)的大小肯定的,谁小就是谁。
TCP的三次握手
防止已失效的请求报文在通过一段时间以后又到达了服务端。建立了新的链接。
和使用三次的效果是同样的。
发起链接的一方不进行链接的确认,耗尽服务器的资源。
解决方法:缓存的方法,确认收到来自客户的ACK以后再进行建立TCB;Session的方式;防火墙
TCP的四次挥手
a) 由于在服务端的ACK和FIN阶段是必须分开的,这是一个半链接的状态,服务端可能还会给客户端发送信息。
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地址分类和特色
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表示该网络上全部的主机。
B类地址128.1.0.0~191.255.255.255
C类地址192.0.1.0~223.255.255.255
D类地址224.0.0.0~239.255.255.255,多播地址,通常不用的
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地址和子网掩码只要进行与运算立刻就能够得出网络地址。
l 对划分子网的好理解,这样获得的是子网地址
l 对不划分子网的,规定必须使用默认子网掩码,默认子网掩码中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,路由器在转发数据包以前把TTL减1,若是为0这时就丢弃该数据包,显然若是TTL=1表示该报文只在本局域网中传输。
协议:指明此数据包携带的适何种协议的数据,如TCP、UDP,ICMP等,目的主机判断后就可知道该交给谁了
首部校验和:只检查首部,不检查数据部分
路由器分组转发算法
ICMP协议特色
ICMP协议应用
traceroute指令
traceroute从源主机向目的主机发送一连串的IP数据包,数据包中封装的是不可交付的UDP数据包(使用非法的端口号)。第一个IP数据包P1的TTL设为1,当第一个P1到达第一个路由器R1时,R1先收下它,而后把TTL减1,因为TTL减1后为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)IGP:内部网关协议,即在一个自治系统内部使用的路由选择协议,如RIP和OSPF。
(11)RIP是一种分布式的基于距离向量的路由选择协议,要求网络中的每个路由器都要维护从它本身到其余每个目的网络的距离向量。距离便是跳数,路由器与直接相连的网络跳数为1,之后每通过一个路由器跳数加1。RIP容许一条路径最多包含15个路由器,所以当距离为16时认为不可达,这由于如此限制了网络的规模,说明RIP只能工做在规模较小的网络中。RIP的三个要点:仅和相邻路由器交换信息;交换的信息是当前路由器知道的所有信息,即路由表;按固定的时间间隔交换路由信息,如30秒。RIP协议使用运输层的用户数据报UDP进行传送,所以RIP协议的位置位于应用层,可是转发IP数据报的过程是在网络层完成的。RIP是好消息传播的快,坏消息传播的慢。
(12)OSPF:最短路径优先,三个要点:采用洪泛法向本自治系统的路由器发送信息;发送的信息就是与本路由器相邻的全部路由器的链路状态,但这只是路由器所知道的部分信息;只有当链路状态发生变化时,路由器才用洪泛法向全部路由器发送此信息。OSPF直接使用IP数据包传送,所以OSPF位于网络层。
EGP:外部网关协议,若源站和目的站处在不一样的自治系统中,当数据报传到一个自治系统的边界时,就须要使用一种协议将路由选择信息传递到另外一个自治系统中,如EGP。