Linux网络编程(7)——网络基础—传输层

传输层:

  • 负责数据能够从发送端传输接收端。

端口:就是代表一个唯一进程。

端口号范围划分:(uint16_t)

0 - 1023:知名端口号,HTTP,FTP,SSH等这些广为使用的应用层协议,他们的端口号都是固定的。

1024 - 65535:操作系统动态分配的端口号,客户端程序的端口号,就是由操作系统从这个范围分配的。

常见的两个问题:

  • 一个进程能否绑定多个端口号。——可以
  • 一个端口能否被多个不同的进程绑定。——通常情况不可以,

知名的端口号:

  • ssh服务器,使用22端口——虚拟机连接就是这个端口
  • ftp服务器,使用21端口——用于传输文件
  • telnet服务器,使用23端口
  • http服务器,使用80端口
  • https服务器,使用443端口

查看知名端口号的命令:cat/etc/services


UDP协议端的格式:加上八字节就是UDP协议端

md5sum 命令特别差用,把md5当作校验和来使用。

有没有可能出现两个不同的原串,md5值相同?

理论上是存在。但是在工程上不考虑。


TCP协议

重要的TCP状态 :

  • LISTEN :手机开机信号良好
  • ESTABLISHED:连接建立成功,可以进行通信
  • CLOSE_WAIT:在断开连接时内核回复ACK的时候,等待执行 close() 函数。服务端有大量CLOSE_WAIT 是因为忘记调用close。
  • TIME_WAIT:过一会儿再进行close,为了防止最后一个ACK 丢包,保证丢包之后还有机会重传。及时客户端进程退出了,TIME_WAIT状态还是存在的,如果最后一个ACK丢了,对端的重传的FIN有机会去处理它。

保持可靠性机制——滑动窗口机制:(快重传)

 

丢包情况:

丢包情况二中:丢包之后到重发之间,这些数据接收端其实之前就已经收到了, 被放到了接收端操作系统内核的接收缓冲区中。

快重传和超时重传的本质是一样的,借助确定序号的特点,做到只重传丢的那部分数据,其他的正确到达,无需重复传输。


 流量控制:(图中所示是单单是流量控制变化情况)

真实的窗口大小控制是流量控制和拥塞控制的窗口大小的较小值。 

拥塞控制:


延时应答机制:(提高传输效率)

具体延时多少???

  • 数量限制:每隔N个包就应答一次
  • 时间限制:超过大延迟时间就应答一次

捎带应答机制:(提高传输效率)延时应答的基础之上引入的机制。


面向字节流:

创建一个TCP的socket,同时在内核中创建一个发送缓冲区 和一个 接收缓冲区。

粘包问题:


TCP的异常情况:

  • 进程终止:进程终止会释放文件描述符,仍然可以发送FIN. 和正常关闭没有什么区别。
  • 机器重启:和进程终止的情况相同。
  • 机器掉电/网线断开:接收端认为连接还在,一旦接收端有写入操作,接收端发现连接已经不在了,就会进行reset。即使没有写入操作,TCP自己也内置了一个保活定时器,会定期询问对方是否还在。如果对方不在,也会把连接释放。
  • 另外,应用层的某些协议,也有一些这样的检测机制。例如HTTP长连接中,也会定期检测对方的状态。例如QQ,在QQ 断线之后,也会定期尝试重新连接。

TCP和UDP对比:

  • 如果需要可靠性(比如外网的复杂环境),优先考虑TCP。
  • 如果网络机构本身简单,考考行比较高,对传输效率要求高,优先考虑UDP。
  • 如果传输的数据比较大,TCP(UDP的包最大长度64K)。
  • 如果需要广播的话,只能用UDP,TCP不能广播。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值