news 2026/8/18 22:38:24

Linux编程网络基础(二)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux编程网络基础(二)

文章目录

  • 一、源IP和目的IP
  • 二、认识端⼝号
    • 1.端口号是传输层协议的内容
    • 2.端口号范围划分
    • 3.“端口号”与“进程ID”
    • 4、源端口号和目的端口号
  • 三、Socket
  • 四、传输层的典型代表
    • 1.TCP协议
    • 2.UDP协议
  • 五、网络字节序

一、源IP和目的IP

数据从你的主机(源IP)传输到目标主机(目的IP)并不是目的,将数据传给目标主机上的特定的进程才是数据传输的目的,我们日常使用的QQ、微信、游戏…都是进程,只要将数据传给进程,数据就完成了任务。

所以:数据传输到主机不是⽬的,⽽是⼿段。到达主机内部,在交给主机内的进程,才是⽬的。

但是系统中,同时会存在⾮常多的进程,当数据到达⽬标主机之后,怎么转发给⽬标进程?这就要在⽹络的背景下,在系统中,标识进程的唯⼀性

二、认识端⼝号

1.端口号是传输层协议的内容

  • 端⼝号是⼀个2 字节 16 位的整数;
  • 端⼝号⽤来标识⼀个进程, 告诉操作系统, 当前的这个数据要交给哪⼀个进程来处理;
  • IP地址 + 端⼝号能够标识⽹络上的某⼀台主机的某⼀个进程;
  • ⼀个端⼝号只能被⼀个进程占用;

2.端口号范围划分

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

3.“端口号”与“进程ID”

  • 端口号是网络通信的标准化标识,而PID是操作系统内部的动态标识。
  • 端口号是对外的"服务门牌号"(固定且标准),PID是对内的"员工工号"(动态且内部)
  • 进程 PID 属于系统概念,技术上也具有唯⼀性,确实可以⽤来标识唯⼀的⼀个进程,但是这样做,会让系统进程管理和⽹络强耦合,实际设计的时候,并没有选择这样做。

另外, ⼀个进程可以绑定多个端⼝号; 但是⼀个端⼝号不能被多个进程绑定;

4、源端口号和目的端口号

  • 源端口号:标识发送方主机上的发起通信的应用程序。
  • 目的端口号:标识接收方主机上的接收通信的应用程序。

传输层协议( TCP 和 UDP )的数据段中有两个端⼝号, 分别叫做源端⼝号和⽬的端⼝号. 就是在描述 “数据是谁发的, 要发给谁”;

三、Socket

  • IP 地址⽤来标识互联⽹中唯⼀的⼀台主机,Port⽤来标识该主机上唯⼀的⼀个⽹络进程
  • IP+Port就能表⽰互联⽹中唯⼀的⼀个进程
  • 通信的时候,本质是两个互联⽹进程进⾏通信
  • {srcIP,srcPort,dstIp,dstPort }这样的4元组就能标识互联⽹中唯⼆的两个进程
  • 所以,⽹络通信的本质,也是进程间通信,将 ip+port 叫做套接字 socket

四、传输层的典型代表

  • 传输层是属于内核的,那么我们要通过⽹络协议栈进⾏通信,必定调⽤的是传输层提供的系统调⽤,来进⾏的⽹络通信。

1.TCP协议

  • 传输层协议
  • 有连接
  • 可靠传输
  • ⾯向字节流

2.UDP协议

  • 传输层协议
  • 无连接
  • 不可靠传输
  • ⾯向数据报

五、网络字节序

内存中的多字节数据相对于内存地址有⼤端和⼩端之分, 磁盘⽂件中的多字节数据相对于⽂件中的偏移地址也有⼤端⼩端之分, ⽹络数据流同样有⼤端⼩端之分. 那么如何定义⽹络数据流的地址?

  • 发送主机通常将发送缓冲区中的数据按内存地址从低到⾼的顺序发出;

  • 接收主机把从⽹络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到⾼的顺序保存;

  • 因此,⽹络数据流的地址应这样规定:先发出的数据是低地址,后发出的数据是⾼地址.

  • TCP/IP协议规定,⽹络数据流应采⽤⼤端字节序,即低地址⾼字节.

  • 不管这台主机是⼤端机还是⼩端机, 都会按照这个TCP/IP规定的⽹络字节序来发送/接收数据;

  • 如果当前发送主机是⼩端, 就需要先将数据转成⼤端; 否则就忽略, 直接发送即可

    为使⽹络程序具有可移植性,使同样的C代码在⼤端和⼩端计算机上编译后都能正常运⾏,可以调⽤以下库函数做⽹络字节序和主机字节序的转换。

  • h 表⽰ host , n 表⽰ network , l 表⽰ 32 位⻓整数, s 表⽰ 16 位短整数。

  • 例如 htonl 表⽰将 32 位的⻓整数从主机字节序转换为⽹络字节序,例如将IP地址转换后准备发送。

  • 如果主机是⼩端字节序,这些函数将参数做相应的⼤⼩端转换然后返回;

  • 如果主机是⼤端字节序,这些函数不做转换,将参数原封不动地返回。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/18 19:51:16

【MAT1001】托马斯微积分期末复习提纲详解

微积分期末复习提纲详解 一、极限(Limit Review) 1. 定义 设函数 f(x)f(x)f(x) 在点 x0x_0x0​ 的某个去心邻域内有定义,如果存在常数 AAA,对于任意给定的正数 ε\varepsilonε,总存在正数 δ\deltaδ,使得…

作者头像 李华
网站建设 2026/8/18 21:25:19

Switch系统优化终极指南:从零基础到精通大气层系统

Switch系统优化终极指南:从零基础到精通大气层系统 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 想要让你的Switch发挥最大潜能吗?大气层系统作为目前最稳定、功能…

作者头像 李华
网站建设 2026/8/18 18:02:15

JVM G1 和 CMS 详解与对比

G1(Garbage-First)和 CMS(Concurrent Mark Sweep)都是 JVM 中针对老年代的垃圾收集器,旨在解决传统 Serial Old、Parallel Old 收集器的STW(Stop-The-World)时间过长问题,适用于高并…

作者头像 李华
网站建设 2026/8/18 20:16:21

实战解析:2PC与Saga分布式事务的完全避坑指南

实战解析:2PC与Saga分布式事务的完全避坑指南 【免费下载链接】school-of-sre linkedin/school-of-sre: 这是一个用于培训软件可靠性工程师(SRE)的在线课程。适合用于需要学习软件可靠性工程和运维技能的场景。特点:内容丰富&…

作者头像 李华
网站建设 2026/8/17 12:05:15

Lumafly模组管理器:重构空洞骑士模组生态的专业解决方案

Lumafly模组管理器:重构空洞骑士模组生态的专业解决方案 【免费下载链接】Lumafly A cross platform mod manager for Hollow Knight written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/lu/Lumafly 在《空洞骑士》的模组生态中,玩…

作者头像 李华
网站建设 2026/8/18 8:21:24

12.14 - 搜索旋转排序数组 判断两个结构体是否相等

目录 1.搜索旋转排序数组 a.核心思想 b.思路 2.判断两个结构体是否相等 a.默认情况 b.特殊情况处理 c.重载 运算符 1.搜索旋转排序数组 33. 搜索旋转排序数组 - 力扣(LeetCode)https://leetcode.cn/problems/search-in-rotated-sorted-array/de…

作者头像 李华