TCP格式&&可靠性保证&&URG PSH区别
1. 电路交换和分组交换的区别,优劣对比
2. TCP/IP协议有哪几层,各层的作用是什么?列举各层主要的协议名称
- 应用层:提供应用层面沟通的层
主要协议:ftp http smtp telnet(tcp) dns(udp) ping(icmp)- 传输层:提供节点间的数据传输服务
主要协议:tcp(基于字节流面向链接,所以长连接时容易出现粘包问题)、udp(基于数据报,无连接,不会出现粘包问题)- 网络层:标明数据的目的地址,不能保证传输数据的正确性,
主要协议:ip协议,ICMP协议(ping),ARP协议,RARP协议,IGMP协议- 网络接口层:对于实际的网络媒体进行管理,定义如何使用实际网路来传输数据
TCP
- 源端口号和目的端口号:各占两个字节分别写入源端口号和目的端口号
- 序号:占4个字节,序号范围是(1,2^32-1),共2^32个序号,当序号增加到2^32-1时,下一个序号就会回到0。用来标识从TCP源端向TCP目标端发送的数据字节流,它表示在这个报文段中的第一个数据字节。
- 确认序号:是期望收到对端下一个报文段的第一个数据字节的序号
- 头部长度:占4位,TCP报文短的首部长度,最大60,没有用选项是20.
- 预留:由跟在数据偏移字段后的6位构成,预留位通常为0.
- 标志位:
URG:紧急指针(urgent pointer)有效
ACK:确认序号有效
SYN:发起一个连接
RST:重置 连接,当RST位置为1后说明TCP链接中出现严重问题,必须释放连接然后重新建立
PSH:在要求键入一个命令时,无需等待就立即要收到对方的兴颖时,使用PSH位,将PSH位置为1后,接收方不等缓冲区填满就向上交付数据。
FIN:关闭连接标志位- 窗口大小:占两个字节,指的是发送本报文段的一方的接收窗口大小,表明接收方允许对方发送的数据量。
- 校验和:采用CRC校验。
- 紧急指针:紧急指针仅在URG=1时才有效,指出本报文段中的紧急数据的字节数(也就是紧急数据的末尾在报文段中的位置),窗口为0时也可发送紧急数据。
2. URG与PSH的区别
URG(紧急位):当URG=1的时候,紧急指针有效。紧急指针是一个正的 偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是从发送端向另一发送发送紧急数据的方式。数据从第一个字节到紧急指针所指字节就是紧急数据。数据段中的紧急数据不进入缓冲区就直接交给上层进程,而余下数据则要进入接收缓冲区。
PSH(急迫位):PSH=1时,客户端发送给服务器的报文段立即被服务器TCP交付给应用进程处理,而不用再等整个缓存都填满之后再向上交付。一般情况下,TCP等缓冲区写满之后才向上提交给应用进程,注意PSH=1时数据还是要从缓冲区向上提交的,只是不用再等到缓冲区满了之后再向上提交
3. TCP通过哪些措施保证传输的可靠性
超时重传:
为每个TCP报文段都维护一个重传定时器,定时器在TCP报文段都维护一个重传定时器,定时器在TCP报文段第一次被发送时启动,如果超时时间内未收到应答,则重传报文段并重置定时器。
确认相应
对于一个收到的请求都将发送一个确认
首部校验
由发送端填充16位校验和,接收端进行CRC校验,及教研TCP头部,又校验数据。
对接收到的数据进行排序
丢弃重复数据
流量控制
TCP通过窗口的大小进行流量控制,防止接收慢的主机缓冲区溢出
- 面向字节流,不对数据解析,防止报文被截断
定时器&&三次握手&&滑动窗口&&DNS
一、 TCP/IP四层模型中常见的定时器
保活定时器
保活计时器用来防止两个TCP之间的连续出现长时间的空闲。
假定客户已主动与服务器建立了TCP链接。然后这个客户端出现故障。在这种情况下,这个链接就会永远的处于打开状态。而服务器维护一个链接,也是要耗费一定的资源的,所以必须采取措施,使服务器不能白白等下去。
要解决这种问题,就要对服务器设置保活计时器。每当服务器收到客户的信息,就将计时器复位,保活时间通常设置为2小时。若服务器过了两小时还没有收到客户的信息,他就发送一个探测报文,以后每隔75秒就发一次,连续发送10个探测报文后客户端仍然没有响应,服务器就认为客户端出现了故障,接着就关闭这个链接。http长连接时会用到超时重传定时器
当TCP发送报文段时就创建超时重传定时器,若在时间到之前收到了对应端的回应消息则撤销定时器,否则若超过时间还没有收到则认为发送的报文对端没有收到,然后重新发送报文,并重置定时器
坚持定时器
假设TCP收到了一个窗口大小为0报文段,发送TCP就停止传送报文段,直到接收TCP发送一个非零的窗口大小。但是这个非零窗口大小的确认,有可能丢失,若确认丢了,接收TCP并不会知道,而是认为他已经完成任务了。但是发送TCP由于没有收到确认,就会一直等待接收方发送确认来通知窗口的大小。双方的TCP这时就会造成死锁,所以要使用一个计时器来避免死锁的发送。
当TCP收到一个窗口大小为0的确认时,就要启动坚持计时器。当坚持计时器期限到时,发送TCP就发送一个特殊的探测报文,这个探测报文段只有一个字节数据,它有一个序号,但是它的序号永远不需要确认。探测报文段提醒对端,确认已丢失,必须重传。
坚持计时器的值设置为重传时间的数值。若没有收到从接收端来的响应,需要发送一个探测报文,并将坚持计时器的值加倍和复位,直到这个值增大到门限值(通常60秒)为止。在这以后,发送端每隔60秒发送一个探测报文,直到窗口重新打开。时间等待定时器
- 主动关闭一方会进入TIME_WAIT状态,被动关闭一方要确定主动关闭一方发送的最后一次ACK回应可以收到
- 防止有其他链接再次链接上已经断开的链接。因为链接一般存活的时间为MLS时长。(在实际socket编程中可以通过setsockopt来设置端口复用)
http://blog.csdn.net/lf_2016/article/details/60468161
二、TCP三次握手建立连接
三次握手
三次握手状态图
TCP的三次连接中,客户端是主动链接,服务器是被动连接,整个过程有三次数据报文段的传送,所以TCP建立过程又称为三次握手。
服务器进程先创建传输控制块TCB,准备接受接受客户进程的连接请求,然后服务器进程就处于LISTEN(收听)状态,等待客户端的连接请求。传输控制块TCB里面存储了每一个连接中的一些重要信息,比如:TCP连接表、到发送和接受缓存的指针,到重传队列的指针,当前的发送和接受序号。连接的步骤
- 客户端的进程也是先创建传输控制块(TCB),然后向服务器发出连接请求报文段。这时首部中的同步位SYN=1,同时选择一个初始序号seq=x。TCP规定,SYN=1的报文段不能携带数据,但要消耗一个序号。这时客户进程进入SYN-SENT(同步已发送)状态。
- 服务器收到连接请求报文段后,如果同意连接,则向客户进程发送确认。在确认报文中,SYN=1,ACK=1,确认号是x+1,同时也为自己选择一个初始序号seq=y。这时服务器进程进入SYN-RCVD(同步收到)状态。
- 客户进程收到服务器的确认之后,还要再向服务器发出确认。确认报文段中,ACK=1,确认序号ack=y+1,而自己的序号是seq=x+1。TCP规定,ACK可以携带数据,但如果不携带数据的话则不消耗序号。
这时TCP连接建立,客户端进入连接状态(ESTABLISHED)。当服务器收到确认之后,也立即进入已连接(ESTABLISHED)状态。
为什么要第三次握手呢???
这主要是为了防止已失效的的连接请求报文段。 假设,客 户端发出连接请求报文段,但是该连接请求报文段在某个网络节点中长时间滞留,导致客户端因为超时又发送第二个链接请求报文段 。第二个连接请求与服务器建立连接,而第一个连接请求报文段 以至于延误到连接释放以后才到达服务器。本来这个连接早已经失效了,如果只采用两次握手的话,服务器会误认为客户端又发送了一次连接请求,从而统一建立连接。所以,采用三次握手可以很好的避免这个问题。
http://blog.csdn.net/lf_2016/article/details/60479280
三、TCP四次握手释放链接
- 四次握手释放图
- TCP连接释放步骤
- 客户端进程先向TCP发出连接释放报文段,并停止再次发送数据,主动关闭TCP连接,客户端把链接请求释放报文段首部的FIN置1。这时客户端TCP进入FIN-WAIT-1(终止等待1)状态,等待服务器的确认。TCP规定,FIN报文段即时不携带数据,他也消耗掉一个序号。
- 服务器收到连接释放报文段后立即发送确认,然后服务器就进入CLOSE-WAIT(关闭等待)状态。这时服务器的TCP协议通知应用程序,从客户端到服务器的链接就要释放了。这时链接就处于半关闭状态,也就是客户端已经没有数据要发了,但是服务器要发送数据的话,客户端仍要接受,也就是从服务器到客户端这个方向的连接并未关闭。
- 客户端在接受到来自服务器的确认之后,就进入FIN-WAIT-2(终止等待2)状态。等待B发出连接释放报文段。 若服务器已经没有数据要发送给客户端了,这时服务器的TCP就要释放链接,服务器向客户端发出连接释放报文段,FIN=1。
- 客户端在接受到服务器的连接释放报文段后,必须对此进行确认。在确认报文段中ACK=1。然后客户端进入TIEM_WAIT(时间等待)状态。
服务器只要收到了来自客户端的确认,就立即进入CLOSED(关闭)状态。然后再回收传输控制块后,就结束了这次TCP连接。
当客户端的超时等待计时器结束之后,客户端立即进入CLOSED状态。然后再回收传输控制块后,就结束了这次TCP连接。
为什么要等2MSL
这最主要是因为两个理由:
为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。服务器会超时重传这个FIN-ACK,接着客户端再重传一次确认,重新启动时间等待计时器。最后客户端和服务器都能正常的关闭。假设客户端不等待2MSL,而是在发送完ACK之后直接释放关闭,一但这个ACK丢失的话,服务器就无法正常的进入关闭连接状态。
他还可以防止已失效的报文段。客户端在发送最后一个ACK之后,再经过经过2MSL,就可以使本链接持续时间内所产生的所有报文段都从网络中消失。从保证在关闭连接后不会有还在网络中滞留的报文段去骚扰服务器。
注意:在服务器发送了FIN-ACK之后,会立即启动超时重传计时器。客户端在发送最后一个ACK之后会立即启动时间等待计时器。
四、滑动窗口协议与停等协议的区别
- 滑动窗口协议就是A给B发数据时会声明自己的窗口大小是多少,就是接收缓冲区还有多少空闲,B给A发数据也一样,一旦满了就停下来等待有空闲再发
- 有一种情况会用到坚持定时器,如果B已经告诉A自己的缓冲区已满,于是A停止发送数据、等待一段时间后,B的缓冲区出现了富余,告诉A我的缓冲区有空闲了,来发数据吧,但是这个报文不幸丢失了,于是就出现了A等待B的通知,B也等待A数据的死锁状态,为了处理这种问题,引入了坚持定时器,每当有0窗口发送时,都会启动坚持定时器,坚持定时器的时间到了就发送一个一字节的探测报文,对方会在此时回应自己接收窗口的大小,如果结果仍然为0,则重设建行次计时器,继续等待。
- 停等协议(1比特滑动窗口)接受方和发送方的窗口大小都是1比特,一般用于网络环境较差,或带宽低的情况。
五、DNS的概念,DNS查询算法
- DNS域名系统是分布式的系统(即使单个计算机出了故障也不影响其他)当某一个应用进程要把主机名解析为IP时,该应用进程就调用解析程序并成为DNS的一个客户,把解析的域名放在DNS请求报文中,以UDP用户数据包方式发送给本地服务器(使用UDP是为了减少开销),本地域名服务器在查找域名后把对应的IP地址放回在报文中返回,应用进程获得母的主机的IP地址后就可以进行通信。
若本地域名服务器不能回答该请求,则此域名服务器就暂时成为DNS中的另一个客户,并向其他域名服务器发出查询请求。这种过程直至找到能够回答该请求的域名服务器为止。 查询算法
主机向本地域名服务器的查询一般都是采用递归查询,即如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求报文,而不是让该主机自己进行下一步的查询。因此,递归查询返回的查询结果或是所要查询的IP地址,或是报错。
本地域名服务器想根服务器的查询通常采用迭代查询,即当根域名服务器收到本地域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器“下一次应向那个域名服务器进行查询”。然后让本地域名服务器进行后续的查询。根域名服务器通常把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应当向哪一个权限域名服务器进行查询。本地域名服务器就这样进行迭代查询。
MAC&&ARP&&透明传输
一、MAC地址的概念及作用
- MAC地址就是网卡的物理地址(硬件地址)48位,
- 作用:唯一标示一台网络设备,在数据链路层中交换机通过识别MAC地址进行数据报的传递
- 源主机向自己所在的网络 广播一个ARP请求,该请求包含目标机器的网络地址,此网络的所有机器都将受到这个请求,但是只有被请求的目标机器会回应一个ARP应答,其中包含了自己的MAC地址。
- IP地址在网络间寻址起作用,在同一个网络内,IP地址被转换成MAC地址来寻址。
- IP地址是终点地址在路由过程中,每跳过一次IP地址不会改变,但是MAC地址一直会变。
二、ARP的用途和算法,那一层会用到ARP
- ARP协议的作用:通过IP地址来获取目的主机的MAC地址,因为网络与网络之间的寻址需要用IP地址,而同一个网络之间则需要使用MAC地址。
- 主机发送IP包之前会检查自己的ARP高速缓存设备看有没有对应的IP-MAC值对,若不存在主机就会像网络发送一个ARP协议广播包,收到 广播包的主机都会查询与自己的IP是否一致,则要回复一个包含自己IP地址的包给源主机,源主机拿到MAC地址后,会更新ARP高速缓存。
三、如何实现透明传输
- 透明传输指不管传输的数据时什么样的组合,都应能在网络上传送,但是如果传输的信息恰好与某个控制信息一致,则必须采用相应的控制措施,
- 透明传输不进行RLP纠错
0比特插入法对数据实现透明传输
如 贞起始标志位为01111110,包含连续6个1,为了避免信息中出现连续6个1,发送端连续5个1就会插入一个0.
01111110是HDLC贞的标志字段。CRC冗余校验算法&&MTU
一、CRC冗余校验算法
- CRC原理:
- 先选择一个用于在接收端进行校验时,对接收的贞进行除法运算的除数
- 看所选定的除数的二进制位数(假定为K位),然后要在要求发送的数据帧后面加上K-1位0,然后这个加了K-1位0的新帧中,以模2除法的方式,除以上面这个除数,所得到的系数就是该帧的CRC校验码。
- 把这个校验码附在源数据帧的后面(不是加0以后的),构建一个新帧发送到接收端,在接收端以“模2除法”方式除以前面的除数,如果可以整除,说明传输过程无差错。
二、路由表项的内容
- 目的地址:用在标示IP包的目的地址或则目的网络
- mask网络掩码:与目的地址一起标示目的主机或者路由器所在的网段的地址。
- pre:标示路由加入IP路由表的优先级,可能到达一个目的地有多条路由,但是优先级的存在让他们按照优先级高的路由进行利用。
- cost:路由开销,当到达一个目的的多个路由优先级相同时,路由开销最小的将成为最优路由
- interface: 输出接口,说明IP包将从路由器的那个端口被转发出去
- nextop:下一跳的IP地址,说明IP包所经过的下一个路由器。
三、什么是MTU什么是路径MTU
- MTU:最大传输单元->指一中通信协议的某一层上所能通过的最大数据包的大小。
- 路径MTU:指一条因特网传输路径中,从源地址到目的地址所经过的所有路径上,所有IP路的MTU的最小值(就是无需分片就能通过 这条路径的最大传输单元的最大值)
- 路径MTU发现方法:
首先将IP数据包标志位的DF位置为1,代表允许分片,然后逐渐增大发送数据报长度,路径上任何需要将分组进行分频啊的设备都会将这种数据报丢弃,并返回数据包过大的ICMP响应到源地址,这样源地址就学习到了无需分片就能通过这条路径的最大的最大传输单元(路径MTU) TraceRoot
用来检测主机到目的主机之间所经路由情况的重要工具- 原理:
他收到目的主机的IP后,首先给目的主机发送一个TTL=1(TTL-》IP数据报最大允许进经过的跳数)的数据报,而经过的第一个路由器收到这个数据包之后,就自动把TTL减一,当TTL减到0后,路由器就把这个包给抛弃了,并同时产生一个主机不可达的ICMP数据包给主机,主机收到这个数据包以后,再把一个TTL=2的数据报给目的主机,然后第二个路由器给主机发ICMP数据报,如此反复,tracerate就拿到了所有IP。
ICMP&&IP&&ARP
###一、ICMP的主要功能
1. ICMP的分类:
1. ICMP差错报文 2. ICMP询问报文
2. ICMP差错报文有5种
1. 终点不可达:当路由器或者主机不能交付报文时
2. 原点抑制:当路由器或者主机由于拥塞二丢弃数据报时,发送此报文这时原点会把发送报文的速度减缓。
3. 时间超时:收到生存时间为0的报文时发送
4. 参数问题:有数据报首部有字段值不正确时发送
5. 改变路由(重定向):
路由器把改变路由报文发送给主机,让主机知道下次应将数据发送给另外的路由器。
2. 询问报文:
1. 回送请求和应答(ping)
ICMP回送请求报文时由主机或路由器向一个特定路由器发出的报文,收到此报文的主机必须给源主机或者路由器发送ICMP回送回答报文,这种报文用未测试的目的主机是否可达,以及了解有关状态。
2. 时间戳请求和回答
ICMP时间戳请求报文是请某个主机或者路由器回答当前的日期和时间,可用来进行时间同步或者测量时间。
二、IP协议
- 格式
- 四位版本号:IPV4或者IPV6
- 四位首部长度:以四字节为单位,最小值是5,所以首部长度最小为20字节,最大为60字节
- 8位区分服务:
- 16位总长度:整个数据包的长度(包括IP首部和IP层)的字节数。
- 16位标示位,是一个计数器,每传一个IP数据报,16位标示加1,用于分片和重新组装数据。
- 3位标志位:
MF:MF=1表示后面还有分片=0表示最后一片
DF:DF=0时才允许分片 - 生存时间:TTL最大为255跳
- 协议:占8位,指出次数据报携带的数据使用何种协议,一遍通知目的主机的IP层将数据部分上交给哪个处理过程。
- 首部校验和:
占16位,只校验数据报的首部不校验数据部分,这里不使用CRC校验码,而采用简单的计算方法。
- 源地址和目的地址各占四个字节,分别记录源地址和目的地址。
地址解析协议ARP
- ARP每一个主机都设有一个ARP高速缓存,里面有所在的局域网上的各主机和路由器的IP地址到硬件地址的映射表。
作用:通过IP地址得知物理地址。
步骤:
- 首先,每台主机都会在自己的ARP缓冲区 (ARP Cache)中建立一个 ARP列表,以表示IP地址和MAC地址的对应关系。
- 当源主机需要将一个数据包要发送到目的主机时,会首先检查自己 ARP列表中是否存在该 IP地址对应的MAC地址,如果有,就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。
- 网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个 ARP响应数据包,告诉对方自己是它需要查找的MAC地址;
- 源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。