网络基础-TCP/UDP/IP/ICMP/FTP/WebSocket协议

2.TCP协议

2.1概念:

TCP是传输控制协议,是面向连接的、可靠的、基于IP协议的传输层协议。

2.2报文结构

报文每一行长度是32bit,4个字节。

第一行,是端口号,包括两部分,两个端口,分别是源端口和目的端口。

第二行,是32位的一个序号。

                序号负责对传输的数据字节进行顺序的编号,以保证传输的数据顺序一致(因为网络传输的过程中,数据的顺序可能错乱)

第三行,是确认号

                确认号用来标识接收端确认收到的数据段。确认号是收到的数据序号+1,然后发给对方,代表我要接着收你的下一个数据序号开始的数据段。

第四行,数据偏移以及一些用于通信的标志位字段

                数据偏移这个数字就是告诉我们这个数据报文的首部到底有多长。因为首部的长度是不固定的,首部长度至少20字节,最多60字节。但长度一定是4字节的整数倍。(最后有个填充部分就是保证整数倍)

标志字段:

URG:urgent代表紧急,当它为1时生效,代表报文中有紧急数据需要处理,尽快交给应用程序处理,而不是按顺序从接收缓存中读取。

ACK:Acknowledgment代表确认,为1时生效,此时确认序号才有效,为0时无效。

PSH:push代表推送,为1时生效,希望对方马上给我响应,当收到PSH为1的报文后,就马上给对方响应,而不需要等到缓存队列满了之后再响应。

RST:reset代表复位,为1时生效,当遇到严重错误的时候,就需要复位,释放连接。

SYN:synchronous代表同步代表请求连接,为1时生效。配合ACK来使用

        SYN=1,ACK=0,表示这是一个建立连接请求的报文。客户端发出。

        SYN=1,ACK=1,表示确认收到并同意建立连接的响应报文。服务端发出。

FIN:finish代表终止,为1时生效,用来释放一个连接,表明数据已经传输完毕,可以断开连接了。

第五行,校验和、紧急指针。

                校验和是一个端到端的校验,由发送端来计算,由接收端来验证。目的就是校验数据在传输过程中有没有被修改或丢失等异常情况。如果接收端检测到校验和不对,那就会丢弃报文。TCP协议的校验和针对报文的首部和数据部分都会做校验。IP协议只会对首部做校验。

2.3三次握手建立连接

为什么需要三次握手,只有这样才能建立可靠连接。

第一次握手,发送端向接收端发出连接请求,等待响应。

第二次握手,接收端响应,通知发送端收到了连接请求。

第三次握手,发送端再次发送确认信息,告诉接收端我收到了你的信息。

两次握手不行

比如:B不知道A有没有收到B的回复报文。又比如:A由于网络原因,给B发了两次建立连接的请求,这时候B无法判断第二次的请求是重复的,B只能选择接受或放弃,但A可以通过第三次握手判断,因为确认号一样就证明重复了,那就放弃。所以,两次握手会导致重复连接,三次则不会,四次握手没必要。

重复连接的情况:

2.4四次挥手断开连接

建立连接我们都知道需要三次握手,但是断开连接却需要四次挥手才可以,这多出来的一次是用来断开数据的。

客户端可以主动发送FIN信号告诉服务端我要跟你断开了,此时服务端收到断开信号后可以马上回消息ACK确认,告诉客户端我收到你的断开请求了,但此时服务端的数据可能还没发完,所以服务端需要等待一段时间,确认数据发完了才能发送FIN信号给客户端,客户端收到服务端的断开信号后,确认服务端的数据也发完了,再发一个确认信号ACK,这样才正式断开连接。

然后客户端还需要等待两个报文周期,因为它不确定最后回的确认消息,服务端收到没。如果服务端没有收到这个确认报文,服务端会重新发送FIN报文。只有客户端等了两个报文周期都没有收到重新发来的FIN报文,才表示服务端确定收到了ACK报文,就可以断开了。

3.UDP协议

用户数据报协议,它是面向无连接的,不可靠的传输层协议。

数据传输时,发送端和接收端不建立逻辑连接。不需要知道对方在不在,发送方直接发数据,接收方只管接数据,也不需要告诉发送端是否收到数据。

4.IP协议

网络层协议,负责网络的寻址。

4.1报文格式

4位版本号:(IPV4, ipv6)

4位首部长度:IP协议报头的长度。

8位服务类型:最小延时,最大吞吐量,最高可靠性,最小成本。

16位总长度:IP协议的长度。(0-64k)

分包组包:如果一个协议太长了,我们需要分成多份,为了弄清楚描述这些小包是哪个打包,需要用下面的字段。

标识:同一个IP包使用同一个标识,表明原来都是同一条协议的。

标志:是否是最后一个包。(0不是最后一个包,1是最后一个包)

偏移量:标识包的前后顺序,也就是原来的IP协议的位置。

8位生存时间:IP协议可以被路由器或者交换机转发的次数。(有的IP地址是不存在的,是永远找不到的,所以这个包一直转发就没有任何意义了,就需要把他抹杀掉)

8位协议:指传输层的协议(TCP, UDP)

16位首部校验和:校验是否在传输过程中发生什么错误。

源IP地址,目的IP地址:IP地址是32位,我们一般使用点分十进制,将32位点分4份,每份8位,然后用10进制表示。

4.2IP地址和网段划分

IPV4地址共32位,由两部分构成:网络号+主机号

同一局域网下的设备网络号都是一样的

主机号就是设备的号码,各不相同

子网掩码

用来确定网络号占多少位。

子网掩码的表示方式:

192.168.1.1/24 表示前24位是网络号

也可以表示成:255.255.255.0

网络号=子网掩码与IP地址进行与运算,也就是把IP地址的主机号都设为0

子网划分

为了提高网络查找效率,确定标准,在世界范围内指定了不同的网段,也就是不同的子网。当然,在此基础上,我们还可以通过子网掩码,指定自己的网络号,继续划分更小的子网。

举例1:

  • IP地址:140.252.20.68
  • 子网掩码:255.255.255.0
  • 网络号:140.252.20.0
  • 这个子网的IP地址范围:140.252.20.0-140.252.20.255(实际能使用的IP地址还要减2,因为主机号部分全零是网络号,全1是广播地址)

举例2:

  • IP地址:140.252.20.68
  • 子网掩码:255.255.240.0 前20位是网络号,后12位是主机号
  • 网络号:140.252.16.0
  • 这个子网的IP地址范围:140.252.16.0-140.252.31.255(实际能使用的IP地址还要减2,因为主机号部分全零是网络号,全1是广播地址)

4.3NAT机制(网络地址转换)

        NAT是用于在本地网络中使用私有地址,在连接互联网时转而使用全局 IP 地址的技术。NAT实际上是为解决IPv4地址短缺而开发的技术。我们现在使用的ip协议一般都是ipv4,也就是使用32位的二进制来表示ip地址,但是这样表示的ip地址是有限个的,最多只有2^32-1个,所以如果想要所有的设备都可以上网交流的话,这样是远远不够的。

        在向别的外网通信的时候,不使用局域网中的IP地址,而是使用它的外网地址.所有处于同一个局域网中的设备,在和外部进行交流的时候,都是使用的外网地址.对于我上面的例子来说,如果我的笔记本192.168.1.3想要和外网交流,那么不会直接使用此时的地址,而是要使用我们的供应商提供的外网地址103.57.12.60 。在不同的局域网之间,IP地址可以相同,但是在同一个局域网内,IP地址不可以相同。另外,外网之间可以任意的进行交流,局域网只有其内部可以互相交流。

4.4路由机制

        每一个路由器都有路由表,甚至我们的主机也都有,数据报根据路由表进行跳转的。用的是局域网内转发(ARP协议)。路由器告诉我们下一站去哪里,将报文转发给默认路由器。即报文的最终目的地路由器不知道,但是推荐了一个地方让我们去问。通过多个路由的转发,最终会到达目的地。

5.ICMP协议

        也是网络层协议,作用就是检测通信错误,如传输超时,主机关闭,线路拥塞,路由器错误等等,都会发送ICMP报文进行通知。

报文格式

6.FTP协议

6.1概念:

        FTP文件传输协议,这是应用层的协议,基于传输层的TCP协议实现的。可以传文件或者下载文件。一般用于C/S架构的软件。使用21号端口。

6.2工作流程:

客户端请求服务端的21号端口,建立连接。

进行身份验证。

客户端发送下载命令,服务端在20号端口创建一个TCP数据连接。

文件传输完成后,TCP断开连接,如果再有新数据需要传输,重新建立20号端口的连接。

FTP数据连接的两种模式:

被动模式(PASV模式)(客户端被动,因为它需要服务端告诉它去连接哪个端口)

当客户端在防火墙后面时,需要使用被动模式。

客户端和服务端通过21号端口三次握手建立TCP连接。

客户端通过刚才建立的控制连接通道,发送PASV数据连接的命令,服务器同意连接后,就会开启一个端口即20端口建立数据连接通道,同时会启动对20号端口的监听,并且返回信息告诉客户端:你可以跟20号端口建立数据连接。

客户端主动跟服务端的20号端口建立数据连接,传输数据。

主动模式(PORT模式)(这时候客户端是主动的,可以指定让服务端连接自己的哪个端口,此时没有防火墙,所以服务端可以连接客户端的端口)

客户端通过三次握手跟服务端21号端口建立控制连接

客户端主动在端口B创建监听,并通过21端口的控制连接通道告知服务端你可以跟我的B端口建立连接。这个告知命令是PORT。

服务器通过20端口跟客户端的B端口建立数据连接,传输数据。

7.WebSocket协议

7.1 概念:

        也是基于TCP协议的一种应用层协议,它最大的特点是全双工通信。实现了客户端和服务器之间的全双工,客户端既可以主动发消息给服务端,(HTTP协议服务端是被动的,不能主动跟客户端通信,只能去响应客户端的请求),服务端也可以主动发消息给客户端。

7.2 HTTP的不足:

        如果服务端的资源频繁更新,作为客户端想要及时地了解最新的资源,就必须不断发请求得到服务端的响应。通常我们会用ajax这种异步加载的方式来不断给服务端发消息,反复询问资源是否更新。这个反复问的过程可以叫轮询。如果长时间没有更新,这样对服务器和网络都会造成无意义的消耗。问的频率越高消耗越大,问的频率低了,就可能错过更新。

7.3WebSocket全双工通信

        HTTP是单工通信,WebSocket是全双工双向通信,通信的每一方都可以主动跟对方联系。所以针对上面这个问题,就可以很好解决。只要服务器的资源有更新,它就可以主动告知客户端,客户端就不需要轮询了,节省了资源。

8.Socket不是协议

Socket是套接字,不是协议,是为了方便使用传输协议(TCP\UDP)而封装出来的一组接口API,它位于应用层和传输层之间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值