赞
踩
目录
下面最后一点来根据我的理解讲解一下tcp的三次握手,和tcp的四次挥手
在两台主机中,可能存在多个跨网络的进程,就比如说你在听音乐的同时进入某个网页,这样就有了两个进程。所以为了区分进程就有了端口号,以便于本机数据到达了对端主机后,本机通过端口号找到对端主机提供的服务,对端主机处理完数据后通过端口号找到本机的对应的服务进程。端口号的作用实际就是标识一台主机上的一个进程。
再来总结一下端口号的内容
1.端口号是传输层协议的内容。
2.端口号是一个2字节16位的整数。
3.端口号用来标识一个进程,告诉操作系统,当前的这个数据要交给哪一个进程来处理。
4.一个端口号只能被一个进程占用
注意:因为端口号是隶属于某台主机的,所以端口号可以在两台不同的主机当中重复,但是在同一台主机上进行网络通信的进程的端口号不能重复。此外,一个进程可以绑定多个端口号,但是一个端口号不能被多个进程同时绑定。
如图所示源端口占两个字节(16位二进制数),源端口就是本机传输给目标主机后需要目标主机回复时,回复时本机进程的端口号。
举个例子:
A有个进程需要访问B的时候,A会自己动态生成一个1024-65535之间的端口号(1-1023著名端口号用于标记固定服务)告诉B返回数据应该返回到自己的那个接口。
同样如图也是两个字节,目标端口就是对方将想要访问的请求传到咱这个目标主机后想要访问咱这个目标主机的那个服务的端口号,有了这个端口号就可以区分传来的数据要交给那个软件来进行分析。目的端口可以是0-1023范围内的知名端口。
举个例子:
A要打开一个网页首先要生成一个自己的源端口,然后就要使用到HTTP Web服务这个端口80,这个端口号就是目标端口。
是在通讯过程中,某个传输方向上的字节流编号。
用作目标主机对,本机发来的TCP报文段的响应。这个的值就是对应的序号加一。
8位一个字节一行四个字节,一共五行,一共20个字节。
但是我在书上查到了这种说法,首部长度指的是首部占32bit字的数目,包括任何选项。由于他是一个4比特字段,因此首部长度最长为60个字节。在解释一下这个字段的单位是32位字。(1个32位字长4字节) 所以当IP首部长度为1111(就是十进制15),首部长度就达到最大值60字节. 这个不常用,为减小开销,常用20字节。(首部长度0101)5*4=20。
作用:万一在日后这个东西需要扩展别的功能,可以往这个6位保留字段填充。
与下面的16位紧急指针连起来用,用来表示紧急指针是否有效,URG标志为1说明紧急指针有效,需要紧急发送,优先处理。一般来说TCP发送数据都需要将数据放到TCP的接收缓冲区中,TCP缓冲区满了以后再向上传送。这个紧急数据是不需要进入缓冲区直接进入上层进程的。
提示接收端应用程序应该立即从TCP接受缓冲区读走数据,为之后的接受的数据腾出位置。当PSH为1的时候,数据是可以不用等待TCP缓冲区满了以后再向上交付。PSH数据包要和PSH到来之前就已经在缓冲区的数据包一起向上交付。和URG不同的是PSH还是需要进入缓冲区而URG是不用进入缓冲区而直接向上交付。
用来表示非正常的断开连接,当RSI置为1的时候,表示有链接错误需要重新建立连接。
表示连接正常断开,发送端完成任务。
当SYN置为1,表示请求建立一个连接,携带SYN标志的TCP报文段为同步报文段;
只有当ACK=1时,确认序号字段才有效。
下面借TCP的三次握手、四次挥手来看一下各个标志位的用法。
保证两台设备同时具备完整的收发
客户端发送同步序列号SYN=1,同时随机产生一个32位序号seq(假设seq=x)请求与服务端建立连接。服务端有SYN=1得知客户端要求建立连接。
如果第一次握手成功就可以判断,服务端就可以确认客户端发送没有问题,自己接受没有问题。
第二次握手服务端收到客户端的连接请求后,需要回复让客户端知道服务端收到了,服务端向客户端发送的数据包里ACK=1、确认序号ack=x+1,同时服务端也需要向客户端发送一个亲求连接数据包里SYN=1、seq随机一个数(seq=y)。因为这个两个请求可以在同一时间发送,所以可以将两次合并在一次握手中发送。
第二次握手成功就可以,客户端就可以判断,客户端发送正常,接受正常,对方发送正常,接受正常。但是现在呢可以看到服务器无法去判断对方接受正常,自己发送正常,所以客户端需要在来一次握手。
第三次握手客户端回复服务端的请求ACK=1,确认序号ack=y+1。
第三次握手成功后客户端就可以判断服务器接收正常,自己发送正常了。
开始挥手
这里客户端和服务端都可以先发送断开连接的请求,假设现在是客户端先发送的断开连接的请求,这时客户端就会发送一个数据包数据包中FIN置为1序号seq为a
这时服务端回复一个确认包给客户端ACK置为1,确认序号为ack+1,序号seq=b
第三次挥手服务端也想断开连接,也发送了FIN请求这时序列号和确认序列号都不变因为只是加了一个FIN请求
第四次挥手客户端给服务端回包ACK置为1 确认序列号ack=b+1 seq=a+1。
假设是客户端先要求断开连接,客户端在进行完前两次挥手后,服务端可能还在处理之前发过来的数据,所以服务端的断开连接请求需要等自身处理数据完后才可以发送,也就是服务端对客户端的回复并不能和服务端的断开连接的请求合在一起发送,两者可能并不在同一时间结束。
TCP首部中的窗口大小是接收方告诉发送方自己还有多少缓冲区可以接收,发送端会根据这个值来发送数据,避免接收端处理不过来。 窗口大小由接收方的窗口大小决定,通常情况下发送方发送的数据大小不能超过接收方的窗口大小。
最大传输单元=规定数据来到数据链路层大小不超过1500字节
最大段长度,应用层数据长度=MTU-网络层报头-传输层报头
发送端发送数据包,如果都要接受端确认应答后才可以。这样每次都一来一回太浪费时间。为了避免这种情况,TCP引入窗口概念。一次可以收发多条数据。
测试数据传输带宽瓶颈,尽可能利用带宽的最大传输值来传输数据,使用这个滑动窗口机制可以探测出双方链路的最大传输能力。
发送端发送了三个数据,这个数据带一个win值指现在有多少个数据,然后接受端可以接受三个。这时下次发送端在就会扩大一次发送5个数据也就时win=5,然后接受端只可以接受4个数据,他就会调整下次的win值,win值不恒定(受限于网络等各种因素)
这个win值时一次次试出来的最开始发送端是不知道这个win值是多少
顾名思义用来校验
是一些可选的数据放在TCP中,TCP协议没有可选项的话其报头固定长度为20个字节。
源端口,目标端口与TCP协议中一样的含义
UDP长度同样是指UDP报头长度看图得最小为8个字节
校验和同理用作校验
指IPV4或者IPV6,IPV4用4位二进制0100表示,IPV6用用四位二进制0110表示
IP报头长度,下面有一个可选字段,意思和TCP中一样。IP报头长度最短位二十个字节
不同服务,然后有不同的数据流,用来做策略
报头长度加负载长度(负载长度=数据长度)
指数据包经过路由器次数,每经过路由一次TTL减一,一旦TTL减为0路由器丢弃该数据包。
标识上层(传输层)所用协议,靠这个号码,IP协议知道要将数据发向那个协议(TCP协议号为6)
只校验IP首部报文
IP分片可以帮助UDP分段(TCP可以分段,但是UDP不可以自己分段)
第一位保留
第二位:Don`s fragment需不需要分片
第三位:Mon fragment 分片没分够需要分更多得片
分片之后同一个数据包靠标识确认,标识相同就是同一个数据包。
指示数据包分割完后拼起来的位置,最后的数据包按这个偏移量来进行重组。
TCP三次握手和TCP四次挥手过程
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。