传输层TCP/IP详解

这篇博客详细介绍了TCP/IP传输层的TCP和UDP协议,包括端口号的含义、范围和知名端口,以及TCP的确认应答、超时重传、连接管理机制如三次握手和四次挥手。此外,还探讨了TCP的滑动窗口、流量控制和拥塞控制等特性,以及TCP与UDP的对比。
摘要由CSDN通过智能技术生成


传输层是TCP/IP中至关重要的一层,它是完成端到端通信的基础,其中TCP是网络数据传输中不可缺少的一部分。

端口号

在这里插入图片描述

端口号的含义和作用

端口号(Port)标识了一个主机上进行通信的不同的应用程序(例如发快递,大致地址是陕西省,西安市(这个就是IP地址)而详细的地址(莲湖区XXX)便是端口号了)

端口号范围划分

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

知名端口号

  • ssh服务器, 使用22端口
  • ftp服务器, 使用21端口
  • telnet服务器, 使用23端口
  • http服务器, 使用80端口
  • https服务器, 使用443端口
  • DNS,使用53端口

我们自己写一个程序使用端口号时, 要避开这些知名端口号.

注意

1.一个进程可以绑定多个端口号(多线程)
2.但一个端口号只能被一个进程绑定

UDP

UDP协议格式

在这里插入图片描述

16位UDP长度, 表示整个数据报(UDP首部+UDP数据)的最大长度;
16位检验和: 如果校验和出错, 就会直接丢弃
在这里插入图片描述

UDP的特点

UDP传输的过程类似于寄信.尽最大努力交付

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

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

  • UDP没有真正意义上的 发送缓冲区. 调用sendto会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作;UDP具有接收缓冲区. 但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致; 如果缓冲区满了, 再到达的UDP数据就会被丢弃;
  • 全双工:UDP的socket既能读, 也能写

基于UDP的应用层协议

  • TFTP: 简单文件传输协议
  • DHCP: 动态主机配置协议
  • DNS: 域名解析协议

TCP

TCP全称为 “传输控制协议(Transmission Control Protocol”). 人如其名, 要对数据的传输进行一个详细的控制;

TCP协议段格式

在这里插入图片描述

  • 源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去;

  • 32位序号/32位确认号: 用于确认应答机制

  • TCP首部长度(4位): 表示该TCP头部有多少个32位bit(有多少个4字节); 所以TCP头部最大长度是15 * 4= 60字节

  • 6位标志位:
    URG: 紧急指针是否有效
    ACK: 确认号是否有效
    PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走
    RST: 对方要求重新建立连接; 我们把携带RST标识的称为复位报文段
    SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段
    FIN: 通知对方, 本端要关闭了, 我们称携带FIN标识的为结束报文段

  • 16位窗口大小: 不等于滑动窗口的大小(因为滑动窗口的大小是固定不变的,不需要传来传去),是接受缓冲区的大小

  • 16位校验和: 发送端填充, CRC校验. 接收端校验不通过, 则认为数据有问题. 此处的检验和不光包含TCP首部, 也包含TCP数据部分.

  • 紧急指针(16位): 标识哪部分数据是紧急数据;

  • 选项(40字节头部): 暂时忽略;

TCP的特点

  • 有连
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值