Linux----网络传输层UDP/TCP

本文详细介绍了TCP和UDP协议在传输层的主要特征,包括端口号的划分、知名端口的用途,以及TCP的确认应答机制、超时重传、滑动窗口、流量控制和拥塞控制。此外,还讨论了UDP的无连接性、不可靠性以及基于UDP的应用。同时,提到了TCP的TIME_WAIT和CLOSE_WAIT状态,以及如何解决粘包问题。最后,分析了TCP和UDP在可靠性和性能上的权衡,给出了TCP的总结和UDP实现可靠性的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引入

①端口号

端口号标识一个主机上进行通信的不同程序
在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信

②端口号划分

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

③知名端口号

比如:

  1. ssh服务器, 使用22端口
  2. ftp服务器, 使用21端口
  3. telnet服务器, 使用23端口
  4. http服务器, 使用80端口
  5. https服务器, 使用443
  6. sunproxyadmin: 使用8081端口

执行命令vim /etc/services可以查看端口号
在这里插入图片描述

④netstat、pidof、killall、ps、 awk、xargs????

netstat:
语法: netstat [选项]
功能:查看网络状态
常用选项:

  1. -n 拒绝显示别名,能显示数字的全部转化成数字
  2. -l 仅列出有在 Listen (监听) 的服務状态
  3. -p 显示建立相关链接的程序名
  4. -t (tcp)仅显示tcp相关选项
  5. -u (udp)仅显示udp相关选项
  6. -a (all)显示所有选项,默认不显示LISTEN相关

例如tcp:在这里插入图片描述

pidof 【进程名】:查看进程的pid
在这里插入图片描述

killall
功能:kill和ps grep等的结合体,用来使用进程名称来杀死进程
参数:

  1. -e:对长名称进行精确匹配;
  2. -l:忽略大小写的不同
  3. -p:杀死进程所属的进程组;
  4. -i:交互式杀死进程,杀死进程前需要进行确认;
  5. -l:打印所有已知信号列表
  6. -q:如果没有进程被杀死。则不输出任何信息;
  7. -r:使用正规表达式匹配要杀死的进程名称;
  8. -s:用指定的进程号代替默认信号“SIGTERM”;
  9. -u:杀死指定用户的进程

在这里插入图片描述

ps axj | grep 【进程名】:查看为【进程名】的所有进程
ps axj | hread -nl && ps axj | grep 【进程名】
ps axj | grep 【进程名】| grep -v grep | awk ‘{print $2}’ | xargs kill -p//第二列
gawk 列处理工具
输入记录中的每个字段都可以通过其位置来引用:$1、$2 等等。 $0 是整个记录。字段不需要被常量引用: n = 5 print $n 打印输入记录中的第五个字段
xargs :Linux xargs 命令

⑤所有协议需要解决的两个问题:

需要解决:

  1. 如何将自己的报头和有效载荷分离的问题
  2. 任何协议都必须解决,要将自己的有效载荷交付给,上层的哪一个协议

1)UDP

①UDP协议段格式

这里是引用
16位UDP长度, 表示整个数据报(UDP首部+UDP数据)的最大长度;如果校验和出错, 就会直接丢弃
所有协议需要解决的两个问题(对于UDP):

  1. 通过定长报头
  2. 16位目的端口号
    1.为什么socket编程中的port是16位的因为协议是16位的 2.为什么server要绑定,因为需要向上层协议交付

UDP或者TCP是在内核里面,tcp/ ip协议栈,本质也是Linux内核的一部分
由于Linux内核是用C语言实现的-->内核中,我们的报头其实是位段

struct udp_header {
    
	uint32_t src_ port: 16
	uint32_t dst_ port:16;
	uint32_t udp_ length: 16:
	uint32_t udp_ check: 16;
}

位段是一种类型,可以定义变量->开辟空间,保存数据->填充报头本质上就是给位段类型对应的变量赋值

②UDP缓冲区

sendto, recvfrom,read,write,send, recv等本质并不是把数据发送到网络中,而是将用户数据拷贝到udp/tcp的发送缓冲区,或者将内核缓冲区中的数据,拷贝到用户
OS中的传输层协议来决定什么时候发送数据,发送多少数据,丢包了该干嘛(UDP丢包了不管)


UDP具有接收缓冲区. 但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致; 如果缓冲区满了, 再到达的UDP数据就会被丢弃;
UDP的socket能同时读写,全双工

③UDP特点及注意事项

UDP传输的过程.

  1. 无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接;
  2. 不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息;(注意 不可靠是 中性词)
  3. 面向数据报: 不能够灵活的控制读写数据的次数和数量

注意事项:

  • UDP协议首部中有一个16位的最大长度. 也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部).,然而64K在当今的互联网环境下, 是一个非常小的数字.,如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装

④基于UDP的协议

  • NFS: 网络文件系统
  • TFTP: 简单文件传输协议
  • DHCP: 动态主机配置协议
  • BOOTP: 启动协议(用于无盘设备启动)
  • DNS: 域名解析协议

2)TCP

引入

冯诺伊曼体系结构中,(硬件与硬件之间是互相独立的&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值