当前位置: 首页 > ai >正文

Linux——TCP和UDP

一、TCP协议

1.特点

TCP提供的是面向连接、可靠的、字节流服务。

2.编程流程

(1)服务器端的编程流程

①socket() 方法创建套接字

②bind()方法指定套接字使用的IP地址和端口。

③listen()方法用来创建监听队列。

④accept()方法处理客户端的连接。

⑤recv()接收客户端发送的数据。

⑥send()向客户端发送数据。

⑦close()关闭连接。

(2)客户端的编程流程

①socket() 方法创建套接字

②connect()与服务器端建立连接。

③send()向服务器端发送的数据。

④recv()接收服务器发送的数据。

⑤close()关闭连接。

(3)注意点

TCP协议只允许一个服务器同时被一个客户端访问,如果想要多个客户端同时访问则需要使用多进程或者多线程处理。

①listen()监听队列,队列有两种,一个是存放未完成3次握手的连接,另一个是存放已完成3次握手的连接。listen()的第二个参数在Linux下表示的是已完成三次握手队列的长度。

②accept()是从已完成3次握手连接的队列中取数据。如果队列中此时没有连接,则会阻塞。

③connect()会进行3次握手,建立连接。

④send()表示已成功将数据发送到发送缓冲区中。

recv()表示从接受缓冲区中数据,如果缓冲区此时没有数据,则会阻塞。

⑤close()方法关闭TCP连接,会进行4次挥手。

3.三次握手和四次挥手

(1)三次握手(客户端connect)

首先,客户端向服务器端发送SYN数据包,表示请求建立连接。

然后,服务器回复ACK和SYN包,确认请求并同步连接参数。

最后,客户端再次确认,发送一个ACK包确认连接建好。

(2)四次挥手(close())

 首先,主动断开方发送FIN包,表示没有数据要发送了。进入FIN_WAIT_1状态。

然后,被动断开方回复ACK确认。被动断开方进入CLOSE_WAIT状态,主动断开方接收到后,变为FIN_WAIT_2的状态。

接着,被动断开方也要准备关闭连接, 发送FIN给另一方。进入到LAST_ACK状态。

最后,另一方回复ACK确认。主动断开方变为TIME_WAIT 状态,被动断开方变为CLOSED状态。

4.对TCP特点的理解

(1)面向连接:连接时需要建立3次握手,4次挥手。

(2)可靠的 :提供应答确认、超时重传、乱序重排和去重的机制。

(3)字节流服务:发送的次数与接收的次数不一样。(因为几次发送的数据会被一次接收到)

二、UDP协议

1.特点

无连接、不可靠的数据报服务。

2.编程流程

(1)服务器端的编程流程

①socket() 方法创建套接字

②bind()方法指定套接字使用的IP地址和端口。

③recvfrom()接收客户端发送的数据。

④sendto()向客户端发送数据。

⑤close()关闭连接。

(2)客户端的编程流程

①socket() 方法创建套接字

②sendto()向服务器发送数据。

③recvfrom()接收服务器发送的数据。

⑤close()关闭连接。

(3)注意点

UDP协议允许一个服务器被多个客户端同时访问。

3.对UDP的理解

无连接:不需要建立连接,直接通过参数进行连接。

不可靠:不提供应答确认等机制。

数据报服务:发送的次数与接收的次数数目相同。因为发送端每执行一次写操作,UDP就将其封装成一个UDP数据报发送。它不会重新传入数据,会直接丢失数据。

http://www.xdnf.cn/news/11937.html

相关文章:

  • 6月14日开班,ESG 合规分析师招生通知
  • FreeRTOS,MicroPython,区别与联系
  • 新制作文件系统占满:Error writing to file - write (28: No space left on device)
  • 雷卯针对易百纳 海思Hi3519AV100开发板防雷防静电方案
  • 虚拟机无法开启-关掉虚拟化
  • ROS中的里程计与IMU的消息类型解读
  • 深入解析异步爬虫中的协程原理:从概念到工程实践
  • c++对imu的角速度积分得到表示旋转四元数
  • 半导体热电技术方案领跑者「富信」×企企通,构建采购数字化升级
  • 【操作系统】基础回顾(一)
  • 解决IDE编译JAVA项目时出现的OOM异常问题
  • LeetCode[513]找树左下角的值
  • C语言基础(11)【函数1】
  • FreeRTOS、Zephyr、RT-Thread,区别与联系
  • 第八部分:第一节 - 初识 React:构建交互式点餐界面骨架
  • 《射频识别(RFID)原理与应用》期末复习 RFID第一章 射频识别技术概论(知识点总结+习题巩固)
  • 2025年计算机科学与网络安全国际会议(CSNS 2025)
  • VSCode主题设计大赛解析与实践指南
  • win10打包的exe在win7运行不了
  • 【Linux】线程同步
  • 《AI角色扮演反诈技术解析:原理、架构与核心挑战》
  • UDP与TCP的区别是什么?
  • 第八部分:第三节 - 事件处理:响应顾客的操作
  • Nginx 文件目录结构总览
  • 10. MySQL索引
  • 泛型编程技巧——使用std::enable_if实现按类型进行条件编译​
  • 测试面试题总结一
  • 7.Demo Js执行同步任务,微任务,宏任务的顺序(3)
  • QGIS新手教程3:QGIS矢量图层导入与导出+Shape Tools插件绘图
  • C++查找算法全解析:从基础到高级应用