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

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数据报发送。它不会重新传入数据,会直接丢失数据。

相关文章:

  • Elasticsearch中的刷新(Refresh)和刷新间隔介绍
  • 叠瓦盘(SMR)和垂直盘(CMR)的区别—「小白教程」
  • Shopify 主题开发:产品详情页多媒体展示升级
  • 【五子棋在线对战】二.项目结构设计 实用工具类模板的实现
  • 多级阻抗 PCB 全解析
  • c++ stl常用算法
  • Lifecycle 核心原理面试回答
  • 标签管理软件_PICK_system_V1.2
  • [Css]等腰梯形
  • constexpr 是 C++11 引入的关键字
  • 【黄金评论】美元走强压制金价:基于NLP政策因子与ARIMA-GARCH的联动效应解析
  • 点评中是如何实现短信登录的
  • [蓝桥杯]对局匹配
  • FreeRTOS、Zephyr、RT-Thread,区别与联系
  • 回归分析-非线性回归及岭回归.docx
  • SIPp:SIP 协议性能测试工具!全参数详细教程!Kali Linux教程!
  • 瀚文机械键盘固件开发详解:HWKeyboard.cpp文件解析与应用
  • 物联网控制技术期末复习 知识点总结 第二章 单片机
  • 34.1STM32下的can总线实现知识(区分linux)_csdn
  • java判断一个字符串(如 str1)是否在给定的一组字符串
  • 校园网站建设提升/论坛推广网站
  • 动漫网站开发毕业设计/2022年今天新闻联播
  • 建站公司怎么接单/网站收录入口申请查询
  • 郑州专业做网站企业/买淘宝店铺多少钱一个
  • 墙膜 东莞网站建设/搜索引擎优化的英文缩写
  • 济源网站制作/大连seo外包平台