网络基础1(传输层,UDP与TCP)

目录

1. 再谈端口号

1.1 五元组:

1.2 端口号范围划分

1.3 认识知名的端口号:

1.4 常见问题:

2. UDP协议

2.1 UDP协议端格式

2.2 常见问题

3. TCP协议

3.1 TCP设计原则

3.2 TCP数据格式

3.3 TCP的安全机制



传输层:负责数据能够从发送端传输到接收端

1. 再谈端口号

端口号(Port)标识了一个主机上进行通信的不同的应用程序

1.1 五元组:

在TCP/IP协议中,用“源IP”,“源端口号”,“目的IP”,“目的端口号”,“协议号”这“五元组”来标识一个通信(可以通过netstat-n 查看)

协议:网络数据传输时,经过的网络节点约定的规则,最终体现为数据格式

IP:在网络层IP协议中包含ip地址这个字段,体现为起点和终点,用来绑定主机

port:主机中的进程

1.2 端口号范围划分

  • 0-1023:知名端口号,HTTP,FTP,SSH等这些广为使用的应用层协议,他们的端口号都是固定的;
  • 1024-65535:操作系统动态分配的端口号,客户端程序的端口号,就是由操作系统从这个范围分配的。

1.3 认识知名的端口号:

有些服务器是非常常用的,为了使用方便,人们约定一些常用的服务器,都是用以下这些固定的端口号:

  • ssh服务器,使用22端口
  • ftp服务器,使用21端口
  • telnet服务器,使用23端口
  • http服务器,使用80端口
  • https服务器,使用443端口

我们自己写一个程序使用端口号时,要避开这些知名端口号

1.4 常见问题:

  • 一个进程是否可以绑定多个端口号?

       可以

  • 一个端口号是否可以被多个进程绑定?

       不可以

端口号是对应进程的

2. UDP协议

UDP传输过程类似于寄信

2.1 UDP协议端格式

  • 16位UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度
  • 如果校验和出错,就会直接丢弃

校验和:类似文件的md5,sha1值作为校验码,通过一个算法,计算二进制数据,算出一个校验码,类似java对象中的hashcode,标识唯一

2.2 常见问题

  • UDP和TCP的区别?(把UDP,TCP的特点对比并说明:UDP的特性+效率比TCP更高

答:UDP的特性:

(1)无连接,不可靠(要保持连接,意味双方保持一个连接状态)

(2)面向数据报(发送和接收,都只能一次完成)

(3)有接收缓冲区,没有发送缓冲区(发送方不关心对方是否接收到,接收方可以接收多个UDP数据)

(4)发送数据大小受限(最多64K因为协议首部长度为16位

  • 如何用UDP传输超过64K的数据?

答:需要在应用层手动分包,多次发送,并在接收端手动拼接

  • 如何用UDP来实现可靠传输?

答:在应用层,应用程序中(自己的代码)实现类似TCP的机制,可靠,大小不限

3. TCP协议

TCP全称为“传输控制协议”,即要对传输的数据进行一个详细的控制

3.1 TCP设计原则

网络数据传输,在保证安全的前提下,尽可能的提高传输效率

  • 安全越高,效率越低
  • 安全越低,效率越高     =>UDP效率比TCP高

3.2 TCP数据格式

常用标志位:

ACK:确认序号是否有效

SYN:请求建立连接,我们把携带SYN标识的称为同步报文段

FIN:通知对方,本端要关闭了,我们称携带FIN标识的为结束报文段

3.3 TCP的安全机制

1. 确认应答机制

2.超时重传机制

背景:基于确认应答机制,还不满足(没有收到应答,不能一直无限期的等待)

没有应答有两种可能:1.发送的数据丢包;2.应答的数据丢包

具体实现:在一定的时间范围内,如果没有接收到应答数据报,就需要重新发送

超时时间:受网络宽带等环境因素影响,带宽越大,传输越快,超时时间就可以小一些

  • 如何确定超时时间是多少?

答:TCP为了保证无论在任何环境下都能比较高性能的通信,因此会动态计算这个最大超时时间:一个底数时长,每次重发,在底数的基础上*2(2的指数方),达到一定的重传次数,意味着对方可能无法接收,需要关闭连接。

3.连接管理机制

在正常情况下,TCP要经过三次握手建立连接,四次挥手断开连接

申请建立到返回ACK确认应答才表示连接成功

  • 三次握手的流程(建立连接)

(1)客户端发送SYN(建立连接的标志位)+SEQ_NO(序号)到服务端

  • 这里的SYN是客户端到服务端的连接

(2)服务端响应SYN,ACK(应答第一个步骤的SYN),SEQ_NO+1(确认序号)到客户端

  • 这里的SYN是服务端到客户端的连接

         客户端接收到响应,建立客户端到服务端的连接(客户端保存这个连接状态)

(3)客户端再响应ACK到服务端,服务端接收到以后,建立服务端到客户端的连接(服务端保存这个连接状态)

连接的建立(保持连接的状态)是有方向的

  • 四次挥手的流程(关闭连接)

 (1)客户端发送FIN到服务端,申请关闭连接,服务端状态设置为CLOSE_WAIT

  • 客户端到服务端的连接状态

(2)服务端响应ACK

(3)服务端发送FIN到客户端,申请关闭连接,客户端接收到,状态设置为TIME_WAIT

  • 服务端到客户端的连接状态

(4)客户端响应ACK,服务端接收到以后,服务端关闭连接

常见问题:

(1)第三步客户端没有直接设置为CLOSED关闭连接?

答:第四步的ACK可能丢包,所以需要等待(超时重传时间)

[TIME_WAIT->CLOSED]客户端要等待一个2MSL(Max Segment Life,报文最大生存时间)的时间,才会进入CLOSED状态

(2)为什么第二步和第三步,没有像建立连接时一样合并数据包?

答:第二步是系统对TCP协议实现时,接收FIN,自动返回ACK,不用执行程序代码

       第三步是程序手动调用执行(服务端关闭连接前,需要执行一些前置工作)

(3)当服务器上出现大量CLOSE_WAIT状态时?

 就是因为服务器没有正确的关闭socket,导致四次挥手没有正确完成,这是一个BUG,只需要加上对应的close即可解决问题。

4.流量控制

接收端处理数据的速度是有限的,如果发送端发的太快,导致接收端的缓冲区被打满,这个时候如果发送端继续发送,就会造成丢包,继而引起丢包重传等一系列连锁反应,因此TCP支持根据接收端的处理能力,来决定发送端的发送速度,这个机制就叫做流量控制

  • 接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 "窗口大小" (标识接收端缓冲区剩余空间大小)字段, 通过ACK端通知发送端;
  • 窗口大小字段越大, 说明网络的吞吐量越高;
  • 接收端一旦发现自己的缓冲区快满了, 就会将窗口大小设置成一个更小的值通知给发送端;
  • 发送端接受到这个窗口之后, 就会减慢自己的发送速度;
  • 如果接收端缓冲区满了, 就会将窗口置为0,这时发送方不再发送数据, 但是需要定期发送一个
    窗口探测数据段, 使接收端把窗口大小告诉发送端。

4.拥塞控制

作用:发送端不清楚网络状态(是否存在网络拥堵)时,先探探路,再决定发送数据的速度

拥塞窗口:窗口大小,标识发送端网络状态。刚开始拥塞窗口大小为1,先慢后快(2的指数曲线)的增长方式变大,到达阈值后,变为线性增长,最终达到网络拥塞后,窗口大小重置为1,重复进行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值