网络套接字【Linux网络编程】

一、预备知识

1、端口号

端口号是一个2字节16位的整数,它是用来唯一地标识改主机上的一个网络应用层的进程。

2、socket

IP地址能标识唯一的一台主机,端口号能标识一台主机上唯一的进程(一个进程可以绑定多个端口号,但是一个端口号不能被多个进程绑定)。

IP+端口号:标识全网唯一的一个进程。

IP+端口号就是socket(套接字)

进程pid已经能标识一台主机上的进程的唯一性了,为什么还需要端口号?

从技术角度看,用进程pid去标识进程唯一性是可以实现的,只是没有这么设计,因为想让系统功能和网络功能解耦。

二、简单认识TCP和UDP协议

TCP(Transmission Control Protocol)(传输控制协议)

UDP(User Datagram Protocol)(用户数据报协议)

有无连接时指,是否需要在数据传送前,保证通信双方已建立了连接(有连接例子:打电话前“喂?”“喂?”来判断双方是否听得到,再讲话;无连接例子:发邮件)

可靠传输:如果数据丢失,传输层会将数据自动补发。

面向字节流和面向数据报是两个相对概念,面向数据报的数据是有明显边界的,发一个收一个。

注:可靠是一个中性词,不可靠并不是一个贬义词,可靠传输是有成本的;它们只是用来描述特征,要根据具体场景来选择两种协议。

 三、网络字节序

内存中的多字节数据相对内存地址有大端和小端之分,也就意味着,A主机是大端,B主机是小端,他们俩进行网络通信,就有可能面临这样的问题:A按大端发送数据,B按小端解析数据。

为了解决这个问题:

直接规定不管大端机还是小端机网络数据流都采用大端字节序,即低地址高字节。

如果当前发送主机是小端,就先将数据转换成大端再发送。

有些字段可能需要我们自己进行大小端转换并发送,可以用以下接口:

四、socket编程接口

 

五、sockaddr结构

套接字编程的种类:

1、域间套接字(同一个机器内)

2、原始套接字(绕过传输层,访问网络层或数据链路层,网络工具)

3、网络套接字(用户间的网络通信)

为了把这么多网络接口统一抽象化,参数类型必须是统一的。

通过判断前两字节数据的类型,来决定后面如何解析

 

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-02-14 00:52:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-14 00:52:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-14 00:52:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-14 00:52:01       20 阅读

热门阅读

  1. 力扣:376. 摆动序列

    2024-02-14 00:52:01       31 阅读
  2. 交易中的胜率和盈亏比估算

    2024-02-14 00:52:01       55 阅读
  3. 数据结构-树

    2024-02-14 00:52:01       29 阅读
  4. day2-理解 linux 云计算

    2024-02-14 00:52:01       32 阅读
  5. C#中 Combine 静态方法

    2024-02-14 00:52:01       29 阅读
  6. STM32 与 ARM 谁比较强大?

    2024-02-14 00:52:01       28 阅读
  7. ndk-r20b 编译 boost 1.74。

    2024-02-14 00:52:01       36 阅读
  8. 遗传算法实现

    2024-02-14 00:52:01       27 阅读
  9. 安卓termux mosh配置nvim远程开发

    2024-02-14 00:52:01       36 阅读
  10. A股上市以来涨幅排行榜

    2024-02-14 00:52:01       35 阅读