计算机网络:TCP/IP协议

目录

网络协议

网络层次划分

(1)物理层

(2)链路层

(3)网络层

(4)传输层

(5)应用层

TCP/IP协议

        IP协议

        TCP协议

        三次握手

        为什么要三次握手?

        四次挥手 

        为什么要四次挥手?

        流量控制

        TCP拥塞控制

        UDP协议

        TCP 与 UDP 的区别

        HTTP协议

        HTTP 中, POST 与 GET 的区别

        DNS协议

        DHCP协议

        DHCP动态主机设置协议:Dynamic Host Configuration Protocol

        在浏览器中输入 www.baidu.com  后执行的全部过程


网络协议

  • 网络协议:计算机网络中为进行数据交换而制定的传输标准。
  • 如两台主机要进行数据交换,但这两主机的数据终端所使用的字符集不同,因此操作员所输入的命令彼此不认识。因此规定必须先将字符集中的字符转换为标准字符集中的字符后才能进行传输,传输到达后再转换成自己的字符。
  • 前面提到的OSI参考模型还在模型阶段,并未被商业采用。OSI体系结构将服务和协议结合起来使得整个体系不以实现。寻址等功能在很多层次上出现,降低了系统效率,且设计之初并未考虑数据安全性和网络管理,因此并不适合计算机和软件工作方式。
  • tcp/ip模型对osi模型的某些层进行了合并。至今已有6个版本,常用的是版本4,即IPv4,版本6IPv6被称为下一代IP协议。

网络层次划分

 

 

 

(1)物理层

  • 基本数据单元为比特流。
  • 确保原始数据可在各种物理媒体上传输。

(2)链路层

  • 基本数据单元为链路层
  • 为网络层提供可靠数据传输。
  • 作用:物理地址寻址、数据成帧、流量控制、数据检错、重发。
  • 重要设备:路由器
  • 主要协议:以太网协议

(3)网络层

  • 基本数据单元为IP 数据包
  • 进行路径选择、路由、逻辑寻址。即负责对子网间数据包进行路由选择,还可实现拥塞控制、网际互连。
  • 使得传输层不必了解网络中数据的传输与交换技术。
  • 主要协议
  1. IP协议(Internet Protocol,因特网互联协议):不可靠、无连接数据报传输,进行数据路由选择及差错检测。
  2. ICMP协议:Internet Control Message Protocol,因特网控制报文协议
  3. ARP协议:Address Resolution Protocol,地址解析协议
  4. RARP协议:Reverse Address Resolution Protocol,逆地址解析协议

(4)传输层

  • 基本数据单元为 报文
  • 负责将上层数据分段,并提供端到端的 可靠或不可靠 的数据传输。
  • 主要设备:网关
  • 主要协议:
  1. TCP协议:Transmission Control Protocol,传输控制协议
  2. UDP协议:User Datagram Protocol,用户数据报协议

(5)应用层

  • 数据传输基本单位为 报文
  • 为应用程序或os提供访问网络服务的接口。
  • 主要协议:
  1. HTTP:Hyper Text Transfer Protocol,超文本传输协议。
  2. FTP:文件传送协议
  3. Telnet:远程登录协议
  4. DNS:域名解析协议
  5. SMTP:邮件传送协议
  6. POP3:邮局协议

TCP/IP协议

  • IP协议

  1. IP数据包是不可靠的。
  2. IP数据包
  • TCP协议

  1. 负责发现传输的问题,一旦发现问题就发出信号,要求重传,知道所有数据安全正确传输到目的地。
  2. 面向连接,所以只能用于端到端的通信。
  3. 提供可靠的数据流服务,采用 【带重传的肯定确认技术】 实现可靠性。
  4. 采用 【滑动窗口】方式 进行浏览控制。窗口:接收能力,以限制发送方的发送速度。
  5. TCP报文:(头部占用20字节)

TCP协议的三次握手和四次挥手

 

注:seq:"sequance"序列号;ack:"acknowledge"确认号;SYN:"synchronize"请求同步标志;;ACK:"acknowledge"确认标志";FIN:"Finally"结束标志。

三次握手

  1. 客户端发出带同步标识为1的连接请求
  2. 服务端接收请求后回复SYN/ACK报文,为这次连接分配资源。
  3. 客户端收到SYN/ACK报文后向服务端发送ACK报文,并分配资源,TCP连接建立。

具体:

  1. 客户A向服务端B发送连接请求,请求报文段首部SYN=1,seq=x,表明传送数据时的第一个数据字节的序号是x
  2. B收到连接请求后,若同意连接,则发回确认,SYN=1,ACK=1,ack=x+1,seq=y
  3. A收到B发出的同意连接请求后,向B给出确认,ACK=1,ack=y+1,seq=x+1,并通知上层应用程序连接已经建立。B收到主机 A 的确认后,也通知其上层应用进程TCP连接已经建立。

为什么要三次握手?

第三次握手是为了【 防止已经失效的连接请求报文段突然又传到服务端】 而产生资源浪费等错误。

  • 首先,两次握手是基本的,客户端向服务端发送请求后,只有收到服务端的响应反馈,确定自己能与服务端建立连接,才能开始发数据。
  • 如果只有两次握手,假设客户端发出的第一个连接请求由于某些原因在网络节点滞留导致延迟,客户端不得不重新发送一次。之后延迟的请求到达服务端。所以服务端收到了两个请求,而实际上客户端只请求了一次。极端情况会导致服务端建立了多个响应在等待,造成极大资源浪费。

四次挥手

  1. 加入客户端要中断连接,客户端会发送FIN报文,表示:客户端已经没有数据要传了,如果服务端还有数据没发送完,可以不必关闭Socket,继续发送,所以你先发送ACK。
  2. 服务器端收到FIN报文后,发送ACK报文,表示:告诉客户端请求收到了,但我还没准备好,请继续等我的消息。 Client端就进入FIN_WAIT状态
  3. 待服务端数据发送完毕后,服务端向客户端发送FIN报文,表示:服务端这边数据发完了,准备关闭连接。
  4. Client端收到FIN报文后,就知道可以关闭连接了,但他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。
  5. Server端收到ACK后,就知道可以断开连接了。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那Client端也可以关闭连接了。TCP连接就这样关闭了。

具体:

  1. A 把连接释放报文段首部的FIN = 1,其序号seq = u,等待B的确认。
  2. B发出确认,ACK=1,确认号ack = u+1,而这个报文段自己的序号seq =v。TCP服务器进程通知高层应用进程,从A到B这个方向的连接就释放了,TCP 连接处于半关闭状态。若B 发送数据,A仍要接收。
  3. 若B已经没有要向A发送的数据,其应用进程就通知TCP释放连接。FIN=1,ACK=1,seq=w,ack=u+1
  4. A收到连接释放报文段后,必须发出确认,在确认报文段中ACK = 1,确认号ack=w﹢1,序号seq = u + 1。

为什么要四次挥手?

保证双方的数据发送任务都能完整执行。

  • 客户端想断开连接发送请求,但可能服务端还要继续发送数据,所以服务端会发出响应让客户端继续等待;待服务端发送完毕,再由服务端发出FIN请求;之后客户端再进行确认,此时客户端发送确认后让服务端先关闭,客户端等待2MSL时间,没有回复则关闭,避免网络问题导致服务端不知道要关闭。

快速重传

  • 采用超时方式检验出丢包而重传的方式增加了端到端的时延,其实发送方可以在超时事件之前通过冗余ACK来检测丢包。
  • 冗余ACK:再次确认某个报文段的ACK
  • 三次冗余ACK:TCP会对已经接受到的最后一个按序字节数据进行重复确认(产生一个冗余ack)。而发送方一般一个接一个大量传送报文段,所以一个报文段丢失,可能引起许多冗余ack。所以能确定被确认过3次的报文段之后的报文段丢失。

流量控制

流量控制服务:将发送方的发送速率与接受方应用程序读取速率进行匹配,消除发送方使接受方缓存溢出的可能。

  • 接受窗口rwnd:发送方维护的一个变量,指示接受方还有多少缓存空间。rwnd = RcvBuffer - (LastByteRcvd - LastByteRead)
  • 发送方在连接过程要保证:LastByteSent - LastByteAcked <= rwnd

TCP拥塞控制

  • TCP让每一个发送方根据所感知到的网络拥塞程度来限制其能向连接发送流量的速率
  • TCP通过跟踪拥塞窗口来限制向其连接发送数据
  • 拥塞窗口cwnd:一个变量,标识TCP发送方能向网络发送流量的速率。LastByteSent - LastByteAcked <= min( rwnd , cwnd )
  • TCP感知发送方与目的地路径间出现拥塞:通过超时事件 或 三个冗余ACK
  • TCP拥塞控制算法包括:
  1. 慢启动:一条TCP连接开始时,cwnd初始化为1个MSS,每当传输的报文段首次被确认,cwnd就+1 MSS,再发送两个最大报文段,。所以在慢启动阶段,TCP发送速率以指数增长,直到达到慢启动阈值ssthresh。(当检测到拥塞时,更新ssthresh = cwnd / 2 ,取下整)。当速率到达ssethresh时,进入拥塞避免状态。
  2. 拥塞避免:一旦进入该状态,则之后无论何时发送方到达一个新的确认后,cwnd就+1 MSS。此阶段速率呈线性增长。当出现超时或3个冗余ACK事件,进入快速恢复状态。
  3. 快速恢复:(1)若发生的是超时事件,则ssthresh更新为cwnd / 2 ,cwnd被置为1 MSS 。(2)若发生的是3个冗余ACK事件,则ssthresh更新为cwnd / 2 ,cwnd = cwnd / 2 + 3
  • UDP协议

  1. 提供无连接的不可靠的传输层协议,同TCP一样用于处理数据报。
  2. 常用于多媒体数据传输。
  3. 不管数据包的顺序、错误或重发。
  4. 使用UDP协议包括:TFTP(简单文件传输协议)、SNMP(简单网络管理协议)、DNS(域名解析协议)、NFS、BOOTP。
  5. UDP报文:UDP首部(4个字段,各占2字节)

 

TCP 与 UDP 的区别

  • TCP是面向连接的,可靠的字节流服务;UDP是面向无连接的,不可靠的数据报服务。
  • TCP套接字是4元组,UDP是二元组。
  • TCP首部20字节,UDP首部8字节。

 

  • HTTP协议

  • HTTP 协议包括的请求:
  1.   GET:请求读取由URL所标志的信息。
  2.   POST:给服务器添加信息(如注释)。
  3.   PUT:在给定的URL下存储一个文档。
  4.   DELETE:删除给定的URL所标志的资源。

HTTP 中, POST 与 GET 的区别

  1. Get是从服务器上获取数据,Post是向服务器传送数据。
  2. Get是把参数数据队列加到提交表单的Action属性所指向的URL中,值和表单内各个字段一一对应,在URL中可以看到。
  3. Get传送的数据量小,不能大于2KB;Post传送的数据量较大,一般被默认为不受限制。
  4. 根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。

  I. 所谓 安全的 意味着该操作用于获取信息而非修改信息。换句话说,GET请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。

  II. 幂等 的意味着对同一URL的多个请求应该返回同样的结果。

  • DNS协议

  1. 将URL转换为IP地址
  • DHCP协议

  1. DHCP动态主机设置协议:Dynamic Host Configuration Protocol

  2. 局域网协议
  3. 给内部网络或网络服务供应商自动分配IP地址
  4. 给用户或者内部网络管理员作为对所有计算机作中央管理的手段。

数据包、数据报、数据段、数据帧

  • 数据帧:链路层处理单元
  • 数据包:网络层处理单元
  • 数据段:TCP协议
  • 数据报:UDP协议

在浏览器中输入 www.baidu.com  后执行的全部过程

  1. 客户端浏览器通过DNS解析到www.baidu.com的IP地址,通过这个IP地址找到客户端到服务器的路径。 【通过DHCP协议(与运行DHCP的路由器联系)给客户端与DNS服务器分配IP地址】、【通过RCP协议(与运行RCP的路由器联系)获取DNS服务器MAC地址】
  2. 客户端浏览器发起一个HTTP会话到该IP地址,通过TCP进行封装数据包,输入到网络层。
  3. 在客户端传输层,把HTTP会话请求分成报文段,添加源和目的端口,与服务器进行交换。

 

 

IP查询网站:https://ip.sb/

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值