10.30 学习笔记

2.2四次挥手

2.2.1四次挥手的详述
  • 假设客户端发起中断连接请求,也就是发送FIN报文。服务器端接收到到FIN报文,意味着客户端没有数据要发送了,但是如果服务器端还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据,服务器先发送ACK,意味着服务器端还有数据需要发送。这时候客户端进入FIN_WAIT状态,继续等待服务器端的FIN报文。
  • 当服务器端确定数据发送完成,则向客户端发送FIN报文。告诉客户端这边数据发送完成了,准备好关闭连接了。
  • 客户端收到FIN报文后,就知道可以关闭连接了,但是怕服务器端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果服务器端没有收到ACK则可以重传。
  • 服务器端收到ACK后,知道可以断开连接了。客户端等待了2MSL(Maximum Segment Lifetime)(最大报文生存时间,任何报文在网络上生存的最大时间,超过这个时间报文将被丢弃)后依然没有收到回复,证明服务器端已正常关闭,然后客户端也关闭连接。TCP连接关闭完成。
    在这里插入图片描述
    数据传输结束后,通信双方都可以释放连接,客户端和服务器端都处于ESTABLISHED状态。(客户端和服务器端建立连接状态ESTABLISHED——客户端终止等待1状态FIN-WAIT ——服务器端关闭等待状态CLOSE-WAIT——客户端终止等待2状态FIN-WAIT-2——服务器端最后确认状态LAST-ACK——客户端等待状态TIME-WAIT——服务器端、客户端关闭状态CLOSED)
  • (1).的应用进程先向其TCP发出连接释放报文段(FIN=1,序号seq = u),并停止再发送数据,主动关闭TCP连接,进入FIN-WAIT-1(终止等待1)状态,等待服务器端的确认。
  • (2).服务器端收到连接释放报文段后发出确认报文段,(ACK=1,确认号ack=u+1,序号seq=v),服务器端进入CLOSE-WAIT(关闭等待)状态,此时的TCP处于半关闭状态,客户端到服务器端的连接释放。
  • (3).客户端收到服务器端的确认后,进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。
  • (4).服务器端没有向客户端发出的数据,服务器端发出连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1),服务器端进入LAST-ACK(最后确认)状态,等待客户端的确认。
  • (5).客户端收到服务器端的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),客户端进入TIME-WAIT(时间等待)状态。服务器端收到确认报文段后进入CLOSED状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,客户端才进入CLOSED状态。
2.2.2总结四次挥手过程

开始客户端和服务器端处于ESTABLISHED状态——客户端发出连接释放报文段并处于FIN-WAIT-1状态——服务器端发出确认报文段并且进入CLOSE-WAIT状态——客户端收到确认后,进入FIN-WAIT-2状态,等待服务器端的连接释放报文段——服务器端没有向客户端发出的数据,服务器端发出连接释放报文段并且进入LAST-ACK状态——客户端发出确认报文段并且进入TIME-WAIT状态——服务器端收到确认报文段后进入CLOSED状态——客户端经过等待计时器时间2MSL后,进入CLOSED状态。

2.2.3为什么客户端在TIME-WAIT状态必须等待2MSL的时间

MSL最长报文段寿命Maximum Segment Lifetime,MSL=2。

  • (1).保证客户端发送的最后一个ACK报文段能够到达服务器端。这个ACK报文段有可能丢失,使得处于LAST-ACK状态的服务器端收不到已发送的FIN+ACK报文段的确认,服务器端超时重传FIN+ACK报文段,而客户端在2MSL时间内收到这个重传的FIN+ACK报文段,接着客户端重传一次确认,重新启动2MSL计时器,最后客户端和服务器端都进入CLOSED状态。如果客户端在TIME-WAIT状态不等待一段时间,而是发送完ACK报文段后立即释放连接,则无法收到服务器端重传的FIN+ACK报文段,所以不会再重新发送一次确认报文段,则服务器端无法进入到CLOSED状态
  • (2).客户端在发送完最后一个ACK报文段后,在经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失,使下一个新的连接中不会出现这种旧的连接请求报文段。
2.2.4为什么连接的时候是三次握手,关闭的时候却是四次挥手?

因为当服务器端收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接的时候,当服务器端收到FIN报文时,很可能不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端,“你发的FIN报文我收到了”,但是只有等到服务器端所有的报文都发送完了,才能发送FIN报文,因此不能一起发送,所以需要四次握手。

3.TCP和UDP的比较

UDPTCP
是否连接无连接面向连接
是否可靠不可靠传输,不使用流量控制和拥塞控制可靠传输,使用流量控制和拥塞控制
连接对象个数支持一对一,一对多,多对一和多对多交互通信只是一对一通信
传输方式面向报文面向字节流
首部开销首部开销小,仅8字节首部最小20个字节,最大60个字节
适用场景适用于实时应用(IP电话、视频会议、直播等)适用于要求可靠传输的应用,例如文件传输

无连接:顾名思义,面向连接就是要建立连接,无连接就是不建立连接,UDP不需要和TCP一样在发送数据前进行三次握手建立连接,想发数据就可以开始发送了。

UDP只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作。

  • 在发送端,应用层把数据传递给传输层的UDP协议,UDP只会给数据层加一个UDP头标识下是UDP协议,然后就传递给网络层。
  • 在接收端,网络层将数据传递给传输层,UDP只去除IP报文头就传递给应用层,不会进行任何拼接操作。

4.应用层的协议有哪些 ,ping使用的什么协议,工作在哪一层

4.1 应用层的协议

(1)HTTP

Hyper Text Transfer Protocol,超文本传输协议,。

缺省(默认)TCP 80端口,用于浏览器浏览网页,但是网页内容为明文,容易篡改、容易劫持、网页内容容易泄漏。

缺省: “缺省”最初来源于计算机英文文档中的单词"default","default”有很多意思:违约、缺省、拖欠、默认,由于当时计算机方面的翻译水平不高,于是就把这个词直译成了“缺省”,其实应该取它的引申意思“默认”。后来的人们发现,无论怎么解释,缺省好像都说不通,但是由于之前的人们已经习惯了“缺省”这个用法,故依旧延续了这个用法。后来的新一辈的人们觉得说起来很拗口,就使用了"default”的引申意思,所以现在在大多数计算机技术文档或者软件里面,采用的都是意译之后的“默认”这个用法。

(2)HTTPS

S代表Security,缺省工作于TCP 443端口,只是在普通的HTTP和TCP层之间多了一个安全加密的夹层,称之为SSL(Secure Socket Layer),用于加密基于HTTP的网页内容,不容易篡改、不容易劫持、网页内容保密,目前广泛用于网上银行等行业。但有安全漏洞,容易受到中间人欺骗攻击。

(3)SMTP

Simple Mail Transfer Protocol,简单邮件传输协议。

用于邮件发送的基于TCP的应用层协议。

(4)POP3

Post Office Protocol - Version 3,邮局协议版本3。

用于邮件接收的基于TCP的应用层协议。

(5)DNS

Domain Name System,域名系统。

用于解析域名与IP地址的基于UDP/TCP应用层协议。

(6)DHCP

Dynamic Host Configuration Protocol,动态主机配置协议。

用于主机动态获取IP地址、缺省网关、DNS服务器等参数的基于UDP应用层协议。

(7)FTP

File Transfer Protocol,文件传输协议。

(8)sftp

SSH File Transfer Protocol,安全文件传送协议。

4.2 ping使用什么协议?工作在哪一层?

ping使用网络层的ICMP协议,工作在应用层。

4.3 ICMP协议

IP协议提供的是尽力而为的服务。IP协议的优点是简单,但缺少差错控制和查询机制。IP分组一旦分出去,是否到达主机,以及在传输过程中出现哪些错误,源主机是不知道的。在这种情况下,如果出现一些问题,例如:路由器找不到目的主机,分组生存时间超过而必须被丢弃。

针对这些问题,设计了一种差错报告与查询、控制机制来了解信息,决定如何处理。ICMP协议就是为解决以上问题而设计的,ICMP的差错与查询、控制功能对于保证TCP/IP协议的可靠性运行是至关重要的。

4.3.1 ICMP的特点
  • (1)ICMP协议是在网络层的协议,但是报文不是直接传送给数据链路层,而是封装成IP分组,然后在传送给数据链路层。
  • (2)ICMP不能独立于IP协议而单独存在,是IP协议的一个组成部分。
  • (3)ICMP只能搭配IPV4使用,如果是IPV6,需要使用的是ICMPv6。
4.3.2 ICMP的功能
  • (1)确认IP包能否成功到达目的地址;
  • (2)通知在发送过程中IP包被丢弃的原因。
4.3.3 ICMP报文格式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YY4bEEWo-1572435447764)(C:\Users\田洪康\AppData\Roaming\Typora\typora-user-images\image-20191030191028972.png)]

ICMP报文分为两类:差错报告报文与询问报文

类型内容
0回送应答
3目标不可达
4原点抑制
5重定向或改变路由
8回送请求
9路由器公告
10路由器请求
11超时
17地址子网请求
18地址子网应答

以下几种情况不产生差错报告报文

(1)对于分片的分组,如果不是第一个分片出错。

(2)多播分组出错。

(3)具有特殊地址(127.0.0.0或0.0.0.0)的分组出错。

4.4 ping命令

Packet Internet Gtoper,因特网控制消息协议。

ping后面跟的是域名,不是URL。ping是Windows、Unix和Linux系统下的一个命令,也属于一个通信协议,是TCP/IP的一部分,用于在IP主机、路由器之间传递控制信息。

4.4.1 ping的作用
  • (1)利用ping可以查看网络的连通性,更好地帮助我们分析和判断网络故障。ping发送一个ICMP,回声请求( echorequest )消息给目的地并报告是否收到所希望的ICMP echo(ICMP回声应答)( echorepy ),是用来检测网络是否畅通或者网络连接速度的命令。
  • (2)ping也会统计响应时间和TTL(生存周期)(Time To Live)
4.4.2 ping的原理

向指定的网络地址发送一个长度的数据包(ICMP Echo Request),按照约定,若指定网络地址存在,会返回同样大小的数据包(ICMP Echo Reply)。若没有返回,就是超时了,会认为指定的网络地址不存在。

ICMP协议通过IP协议发送。

  • 在Liunx/Unix系统下,序号从0开始计数,依次递增。
  • 在Windows ping程序的ICMP没有规律。

ping没有端口号,端口号是传输层的内容,ping不使用TCP/UDP,跨过传输层,在网络层用的是ICMP协议,属于原生套接字,不需要端口号。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值