[Linux]运输层的端口

既然提到端口,我们就来分析一下为什么要使用端口的缘由吧。我们首先要知道的是,运输层有复用和分用的功能。应用层所有的应用进程都可以通过运输层再传送到IP层,这就是复用。运输层从IP层收到数据后必须交付到指明的应用进程,这就是分用。我们知道,单个进程是用进程标识符来标志的,但在计算机操作系统指派的进程标识符标志运行在应用层的进程是不行的,因为不同的操作系统使用不同的进程标识符。为了让不同操作系统间也实现进程间通信,因此得用一种方法对TCP/IP体系的应用进程进行标志。同时,我们在进行通信的时候,必须知道起点和终点,即通信的一方和另一方,那么我们如何识别终点呢,这里就要使用到协议端口号(端口)。虽然通信的终点是应用进程,但我们要传送的报文交到目的主机的某一个合适的目的端口,剩下的工作就由TCP来完成。

关于端口,分为软件端口和硬件端口。

软件端口:在协议栈层间的抽象的协议端口,应用层的各种协议进程与运输实体进行层间交互的一种地址

硬件端口:不同硬件设备进行交互的接口

在TCP/UDP的首部格式中,都有源端口和目的端口。当运输层收到IP层交上来的运输层报文时,就能根据其首部中的目的端口把数据交付应用层的目的应用进程。

TCP/IP的运输层用一个16位端口号来标志一个端口,端口号只具有本地的意义。

注:不同的计算机具有相同的端口是没有关联的

16位的端口号可允许有65535个不同的端口号。

端口号的分类:

服务器端使用的端口号:分为两类,(1)熟知端口号(系统端口号):数值为0-1023;这些数值在www.iana.org中可查到。常用的熟知端口号为:

  1. FTP: 21
  2. TELNET: 23
  3. SMTP: 25
  4. DNS: 53
  5. TFTP: 69
  6. HTTP: 80
  7. SNMP: 161
  8. SNMP(trap): 162

(2)登记端口号,数值为1024-49151,这类端口号是为没有熟知端口号的应用程序使用的。使用这类端口号需在IANA按照规定的手续登记,防止重复。

客户端使用的端口号:数值为49152-65535,这类端口号在客户进程运行时动态选择,因此称为短暂端口号。当服务器进程收到客户进程的请求报文时,就知道客户进程的端口号,因而把数据发送给客户进程。通信结束后,客户端口号就不存在,此端口号也可以分配给其他客户进程使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈shell中的clear命令实现

NAME(名称) clear - 清除终端屏幕 SYNOPSIS(总览) clear DESCRIPTION(描述) clear可以在允许的情况下清屏. 它会在环境变量中查找终端的类型, 然后到terminfo数据库中找出清屏的方法. 《man手册》 #include <stdio.h>int clear_main(int argc, char **argv) {/* Th…

C++ 对引用的理解

引用可以看做是数据的一个别名&#xff0c;通过这个别名和原来的名字都能够找到这份数据引用必须在定义的同时初始化&#xff0c;并且以后也要从一而终&#xff0c;不能再引用其它数据&#xff0c;这有点类似于常量&#xff08;const 变量&#xff09;。引用变量 里面 实际存储…

[Linux]ARP协议

概念&#xff1a; 1. ARP协议(地址解析协议):由IP地址转换为MAC地址的协议。IP地址&#xff1a;网络号主机号。MAC地址&#xff1a;数据链路层的物理地址&#xff08;硬件地址&#xff09;。IP协议使用了ARP协议&#xff0c;因此被划归为网络层&#xff0c;但其用途是从网络层…

Makefile使用及多文件gdb 调试

文件内容 [koulocalhost makefile]$ cat 1.c #include "3.h" int main() {key_t key ftok(".",1);printf("%d\n",add(1,2));return 0; }[koulocalhost makefile]$ cat 2.c #include "3.h" int add(int a, int b) {return a b; } [k…

C++ 对引用的理解2

1.指针就是数据或代码在内存中的地址&#xff0c;指针变量指向的就是内存中的数据或代码。这里有一个关键词需要强调&#xff0c;就是内存&#xff0c;指针只能指向内存&#xff0c;不能指向寄存器或者硬盘&#xff0c;因为寄存器和硬盘没法寻址。 2.其实 C 代码中的大部分内容…

Ubuntu各版本主要差异

Ubuntu各版本主要差异 (重定向自Ubuntu &#xff0c; kubuntu与xubuntu的差别 ) Ubuntu官方考虑到使用者的不同需求&#xff0c;提供各种不同的发行版。这几种发行版本的差别在于桌面环境和预设安装的软体不同&#xff0c;但套件库是采用一样的&#xff0c;所以您当然可以在安…

[Linux]CRC校验

CRC(Cyclic Redundancy Check),循环冗余校验码&#xff0c;是数据通信领域中最常用的一种差错校验码&#xff0c;其特征是信息字段和校验字段的长度可以任意选定。 CRC校验步骤&#xff1a; CRC分为两部分&#xff0c;前部分为信息码&#xff0c;后部分为校验码&#xff1b;设…

visual studio 2015 配置好qt5后, 第一次运行出现 无法打开源文件“QtWidgets/QApplication”和无法运行rc.exe的解决方案

无法打开源文件“QtWidgets/QApplication” a.在工程中右击项目&#xff0c;点击属性。 b.选择VC目录->包含目录 c.选择Qt安装目录中的头文件包含目录&#xff0c;一般为Qt版本号/版本号/编译器名/include 比如&#xff1a;E:\Qt\Qt5.6.3\5.6.3\msvc2015\include 在C\C>附…

怎么在vs中查看一个数组的所有元素

在监视窗口&#xff0c;我们想要查看所有的数组元素。 这个时候 int arr[] {1,2,3} arr只显示1 正确的方法 arr&#xff0c;10

[Linux]NAT和代理服务器

1. NAT&#xff1a;&#xff08;Network Address Translation&#xff09;是网络地址转换。 我们有这样一种场景&#xff0c;在专用网内部的一些主机本来已经分配到了本地IP地址&#xff0c;但现在又想和因特网上的主机通信&#xff0c;我们可以设法再申请一些全球IP地址&…

使用 C++的第三方库 jsoncpp的步骤以及出现的问题

Jsoncpp 是一个json解析库 下载地址为&#xff1a; http://sourceforge.net/projects/jsoncpp/ 方法一&#xff1a;使用Jsoncpp生成的lib文件 解压上面下载的Jsoncpp文件&#xff0c;在jsoncpp-src-0.5.0/makefiles/vs71目录里找到jsoncpp.sln&#xff0c;用VS2008版本编译&am…

常用的友元重载运算符OSTREAM

对<<运算符重载&#xff0c;让他能和cout一起显示对象内容。 显示值可以使用show()&#xff0c;但是使用cout<<更方便。 ostream类对该运算符进行了重载&#xff0c;将其转换成输出工具。 cout就是一个ostream的对象&#xff0c;他可以自动识别所有的c基本类型。…

python字符串系列

1.find方法用于在长串中查找子串&#xff0c;返回子串中最左位置的下标&#xff0c;如果没找到&#xff0c;则返回-1 2.join方法用于在队列中添加元素 3.lower返回字符串的小写字母版 4.replace返回字符串中所有匹配项均被替换之后得到字符串 5.split将字符串分割成序列 6.stri…

C++ wstring 与 string 之间的相互转换.

方式一&#xff1a;调用Windows API #include <Windows.h> //将string转换成wstring wstring string2wstring(string str) { wstring result; //获取缓冲区大小&#xff0c;并申请空间&#xff0c;缓冲区大小按字符计算 int len MultiByteToWideChar(CP_ACP, 0,…

linux网络编程Internet Socket地址,套接字,和函数

文章内容节选《linux/UNIX 系统网络编程》 Internet domain socket地址有两种&#xff1a;IPv4 IPv6 IPv4被存储在结构体中&#xff0c; 该结构体在 netinet/in.h 中进行定义 cd usr/include/netinet/in.h struct in_addr {in_addr_t s_addr; //32位IPv4地址 }struct so…

浅谈socket网络编程函数参数(一)

socket函数解析 概念: 每个进程的进程空间里都有一个socket描述符表。套接字描述符表属于一个进程&#xff0c;而socket地址结构位于操作系统的内核缓冲。 函数原型 #include <sys/socket.h>int socket(int domain, int type, int protocol);函数参数 family参数 默…

C++ const 与 extern

C语言中&#xff0c; const修饰的全局变量是外部链接属性&#xff0c;比如在 a.c文件中有 const int m_a 10; 在b.c中想用这个全局变量&#xff0c; 在b.c中这样 extern const int m_a; 就可以使用a.c中的m_a C 语言中&#xff0c; const修饰的全局变量是内部链接属性&#x…

浅谈socket网络编程函数参数(二)

bind()函数 bind()函数把一个地址族中的特定地址赋给socket。 例如对应AF_INET、AF_INET6就是把一个ipv4或ipv6地址和端口号组合赋给socket。 int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);参数解析 sockfd&#xff1a;即socket描述字&#xff0c…

对引用的理解3

对数组的引用&#xff0c; 相关语法 int main() { //引用于法// type &引用名 原名//数组的引用//1) 先定义一个数组int array[10];int (&refArray)[10] array;for (int i 0; i < 10; i) {array[i] i;}for (int i 0; i < 10; i) {cout << refArray[i…

运算符与,|与||的区别

|和&是位运算&#xff0c;运算结果是二进制数。 &&,||是逻辑运算&#xff0c;运算结果是真&#xff0c;或者假。 6&3110&0110102 6|3110|0111117&, &&和||计算时注意&#xff0c; 题目&#xff1a;条件1&&条件2&&条件3 如…