端口与进程

本文详细介绍了TCP协议中端口的作用,指出端口用于标识网络中的进程,使得通信能准确到达目标。端口号分为熟知端口、登记端口和短暂端口,用于区分服务器和客户端。TCP报文段包括源端口和目的端口,通过序号和确认号确保数据可靠传输。三次握手和四次挥手确保TCP连接的建立和释放。此外,文章还提到了TCP的超时重传、滑动窗口等机制确保数据的可靠交付。
摘要由CSDN通过智能技术生成

端口与进程

TCP 的包是不包含 IP 地址信息的,那是 IP 层上的事,但是有源端口和目的端口。

就是说,端口这一东西,是属于 TCP 知识范畴的。

我们知道两个进程,在计算机内部进行通信,可以有管道、内存共享、信号量、消息队列等方法。

而两个进程如果需要进行通讯最基本的一个前提是能够唯一的标识一个进程,在本地进程通讯中我们可以使用「PID(进程标识符)」来唯一标识一个进程。

但 PID 只在本地唯一,如果把两个进程放到了不同的两台计算机,然后他们要通信的话,PID 就不够用了,这样就需要另外一种手段了。

解决这个问题的方法就是在运输层使用「协议端口号 (protocol port number)」,简称「端口 (port)」.

我们知道 IP 层的 ip 地址可以唯一标识主机,而 TCP 层协议和端口号可以唯一标识主机的一个进程,这样我们可以利用:「ip地址+协议+端口号」唯一标示网络中的一个进程。

在一些场合,也把这种唯一标识的模式称为「套接字 (Socket)」

这就是说,虽然通信的重点是应用进程,但我们只要把要传送的报文交到目的主机的某一个合适的端口,剩下的工作就由 TCP 来完成了。

认识端口

TCP 用一个 16 位端口号来标识一个端口,可允许有 65536 ( 2的16次方) 个不同的端口号,范围在 0 ~ 65535 之间。

端口号根据服务器使用还是客户端使用,以及常见不常见的维度来区分,主要有以下类别:

服务器端使用的端口号

熟知端口号

登记端口号

客户端使用的端口号

下面展开来说说。

端口号的分类

服务器端使用的端口号

熟知端口号:

取值范围:0 ~ 1023。

可以在 www.iana.org 查到,服务器机器一接通电源,服务器程序就运行起来,为了让因特网上所有的客户程序都能找到服务器程序,服务器程序所使用的端口就必须是固定的,并且总所众所周知的。

一些常见的端口号:

应用程序FTPTELNETSMTPDNSTFTPHTTPHTTPSSNMP

熟知端口号212325536980443161

登记端口号:

取值范围:1024 ~ 49151。

这类端口没有熟知的应用程序使用,但是需要登记,以防重复

客户端使用的端口号

取值范围:49152 ~ 65535。

这类端口仅在客户端进程运行时才动态选择。

又叫 短暂端口号,表示这种端口的存在时间是短暂的,客户进程并不在意操作系统给它分配的是哪一个端口号,因为客户进程之所以必须有一个端口号,是为了让传输层的实体能够找到自己。

PS:在/etc/services文件中可以查看所有知名服务使用的端口。

TCP 是面向字节流的,但传送的数据单元却是报文段。

什么是报文?

例如一个 100kb 的 HTML 文档需要传送到另外一台计算机,并不会整个文档直接传送过去,可能会切割成几个部分,比如四个分别为 25kb 的数据段。

而每个数据段再加上一个 TCP 首部,就组成了 TCP 报文。

一共四个 TCP 报文,发送到另外一个端。

另外一端收到数据包,然后再剔除 TCP 首部,组装起来。

等到四个数据包都收到了,就能还原出来一个完整的 HTML 文档了。

在 OSI 的七层协议中,第二层(数据链路层)的数据叫「Frame」,第三层(网络层)上的数据叫「Packet」,第四层(传输层)的数据叫「Segment」。

TCP 报文 (Segment),包括首部和数据部分。

而 TCP 的全部功能都体现在它首部中各字段的作用,只有弄清 TCP 首部各字段的作用才能掌握 TCP 的工作原理。

TCP 报文段首部的前20个字节是固定的,后面有 4N 字节是根据需要而增加的。

下图是把 TCP 报文中的首部放大来看。

TCP 的首部包括以下内容:

源端口 source port

目的端口 destination port

序号 sequence number

确认号 acknowledgment number

数据偏移 offset

保留 reserved

标志位 tcp flags

窗口大小 window size

检验和 checksum

紧急指针 urgent pointer

选项 tcp options

下面展开来描述个字段的意义和作用。

TCP 首部各字段的意义和作用

源端口和目的端口 Port

各占 2 个 字节,共 4 个字节。

用来告知主机该报文段是来自哪里以及传送给哪个应用程序(应用程序绑定了端口)的。

进行 TCP 通讯时,客户端通常使用系统自动选择的临时端口号,而服务器则使用知名服务端口号。

序号 Sequence Number

占 4 个字节。

TCP 是面向字节流的,在一个 TCP 连接中传输的字节流中的每个字节都按照顺序编号。

例如 100 kb 的 HTML 文档数据,一共 102400 (100 * 1024) 个字节,那么每一个字节就都有了编号,整个文档的编号的

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值