[TCP] TCP/IP 基础知识问答

内容更新中

文章目录

TCP

什么是TCP

TCP 头

沾包和拆包

UDP

什么是UDP

UDP(User Datagram Protocol),是无连接的、不可靠的传输层协议。

UDP的头

源port(16位),目标port(16位),总长度(16位),校验和(16位)

UDP可以发送多长的报文

根据MTU的大小来判断。

MTU是数据链路层数据的最大长度,超出MTU大小的数据会被分片。

比如以太网的MTU大小是1500,IP层的头大小是20字节,UDP头8字节,那UDP的数据长度应该是:

1500 -20 -8 = 1472 字节以下。

windows中可以用ping 命令测试mtu,可以通过-l 指定发送的数据包大小,例如 ping -l 1500 IP地址,

如果提示需要拆分,则MTU比这个值小。

ping 命令基于ICMP协议,是网络层协议。而MTU 实际上就是网络层包的大小。

TCP 和 UDP 的区别

1.TCP是面向连接的,UDP是无连接的。

TCP需要三次握手建立连接,四次挥手断开连接。

UDP没有这个过程。

2.TCP是字节流形式,UDP是数据报的形式。

字节流形式的特点:

TCP的应用层send几次和recv几次是没有关系的。有可能send了一次100字节,recv 10次。

也可能send了10次,结果对端一次recv就全收到了。

这是由于TCP是面向连接的,连接很稳定,TCP可以通过流量控制来控制协议栈中数据具体如何发送。

但是无边界的字节流传输,也就有沾包的问题,就是本来是两段数据,结果对端是连在一起收到的。

需要考虑沾包的问题。

数据报形式的特点:

UDP sendto一次,对端就要recvfrom一次,如果发送的报文过长,超出了接收端缓冲区的大小,超出部分将被放弃。

这是由于UDP是无连接的,所以一次就把整个报文发出去。所以应用层需要控制UDP发送的数据大小

3.UDP可以广播、组播

TCP是面向连接的,所以只能一对一。

UDP无连接,可以一对一发送,也可以一对多发送,进行广播和组播。

4.TCP是可靠的,UDP是不可靠的

TCP通过seq num 和ack num保证数据包是有序的、通过重传机制保证数据包不丢失、通过流量控制和拥塞控制确保网络传输,

所以TCP是可靠的,TCP数据报不重复、不丢失、不乱序。

但是UDP本身没有这些机制,他只是把报文发出去,不保证对端能收到。

5.TCP是全双工可靠通道,UDP是不可靠通道

TCP是全双工的通信,即连接的双方可以同时发送数据。

但是TCP是传输层协议,它支持全双工,其上的应用层未必支持全双工,例如http 1.0 是半双工,http 2.0是全双工。

UDP没有建立稳定的连接,所以我认为他是不是双工通信。

6.TCP头和UDP头的大小不一样

TCP的头大小为 20 - 60 字节之间,由于TCP头中有一个选项字段,他的大小是可变的。

UDP的头大小为固定的8字节。

7.socket编程流程不同

TCP socket编程,一般 创建socket (SOCK_STREAM)、bind、listen、accept(connect),send / recv, close socket。

UDP socket编程,一般 创建socket (SOCK_DGRAM)、sendto(recvfrom, close socket。//可选bind

UDP的应用层协议

SNMP (port 161、162)

DNS

IP

相关推荐
Keepingrun14 分钟前
http登录和授权
网络·网络协议·http
Sirius Wu16 分钟前
OpenClaw 并发安全完整详解
网络·人工智能·安全·ai·架构·aigc
rcms1527026921837 分钟前
AMAT 0190-27952-04 终端服务器
网络
海外数字观察家1 小时前
品未云:博兹瓦纳华商批发零售一体化 ERP,破解本土软件适配难题|CSDN 技术分享
大数据·网络·人工智能·博兹瓦纳进销存系统·博兹瓦纳收银系统·博兹瓦纳erp系统·博兹瓦纳仓库管理系统
段一凡-华北理工大学2 小时前
AI Agent 从入门到封神:24 讲打造你的超级智能体~系列文章23:从Demo到上线:Agent应用的架构设计、性能优化与成本控制实战
运维·网络·人工智能·性能优化·高炉炼铁·工业智能体
leagsoft_10032 小时前
从“策略看不清”到“风险可收敛”:某高端精密制造企业的网络安全策略治理实践
网络·web安全·制造
paopaokaka_luck2 小时前
基于Springboot3+Vue3的宠物殡葬管理系统(webSocket实时通讯、接入腾讯地图、支付宝沙盒支付、Echarts图形化分析)
java·开发语言·网络·后端
承渊政道2 小时前
【从零开始大模型开发与微调:基于PyTorch与ChatGLM】(从退化问题到信息高速公路:ResNet残差网络实战拆解)
网络·人工智能·pytorch·深度学习·resnet·chatglm·卷积
Lhappy嘻嘻3 小时前
网络初识|基础入门:局域网广域网、IP 端口、TCP/IP 五层模型与封装解封装全过程
java·开发语言·网络·笔记·网络协议·tcp/ip
KaMeidebaby3 小时前
卡梅德生物技术快报|兔单克隆抗体:噬菌体 Fab 免疫文库搭建实操:兔单克隆抗体重组构建完整参数
前端·网络·数据库·人工智能·算法