Linux网络编程:Socket编程概念

1. 套接字

socket 是一个编程接口
socket 是一种特殊的文件描述符

1.1 协议域 domain

参数含义
AF_INETIPv4
AF_INET6IPv6
AF_LOCALUnix域

1.2 类型 type

类型Type作用说明
流式套接字SOCK_STREAM提供面向连接、可靠的数据传输服务,数据按字节流、按顺序收发,保证在传输过程中无丢失、无冗余。TCP 协议支持该套接字
数据报套接字SOCK_DGRAM提供面向无连接的服务,数据收发无序,不能保证数据的准确到达。UDP 协议支持该套接字
原始套接字SOCK_RAW允许对低于传输层的协议或物理网络直接访问常用于检测新的协议

1.3 协议 protocol

参数含义
IPPROTO_TCPTCP
IPPROTO_UDPUDP

1.4 网络连接的5个要素

协议: TCP / UDP
本地地址: 本台电脑的IP地址
本地端口: 相对于网络上的其他计算机访问你的计算机时,你开放的端口
远程地址: 要连接其他电脑的IP地址
远程端口: 你访问网络上其他计算机时需要对方开放的端口

2. 协议

如同接头暗号

2.1 TCP (Transmission Control Protocol)

面向连接,数据流,如同大巴车(人满发车,定点发车),打电话(确保信息准确送达)

应用: 下载文件
数据完整性要求高
数据可靠性要求高
传输性能要求低

三次握手/四次挥手

作用: 通信双方必须互相确定对方的存在

报文标识:

报文标识英文含义
YNsynchronous建立连接
ACKacknowledgement确认
FINfinish结束
PSHpush传送
RSTreset重置
URGurgent紧急

在这里插入图片描述

序列号:
序列号是一个32位(bit)的随机数,用来保证传送数据包的顺序。

英文含义
Sequence number顺序号码
Acknowledge number确认号码

三次握手
在这里插入图片描述
四次挥手
在这里插入图片描述
返回的Ack码是对应Seq码+1

数据传送问题

如何确保数据没有损坏?

 数据校验: 校验和(发送的数据包的二进制相加然后取反)

如何确保数据发送过去了?

 确认应答: 接收方收到报文会发送确认。
 超时重传: 发送方发送一段时间后没收到确认会重新发送。

如何确保数据及时到达?

 流量控制: 当接收方来不及处理发送过来的数据,能提示发送方降低发送的速率,防止包丢失。
 拥塞控制: 当网络拥塞时,发送方会减少数据的发送。

TCP 如何实现可靠性?

 1. 准确: 连接管理(三次握手四次挥手)
 2. 安全: 数据校验、确认应答、超时重传
 3. 迅速: 流量控制

2.2 UDP (User Datagram Protocol)

无连接,数据报,如同出租车(随到随走),发短信(不是关心对方马上收到)

分类:

分类举例
单播(unicast)私聊,爱奇艺视频
广播(broadcast)广告,病毒
多播 / 组播(multicast)群聊,春晚直播

在这里插入图片描述

3. 路径

3.1 IP

Internet 中主机的标识

分类: 32位(IPV4) / 128位(IPV6)

表示形式:

协议形式e.g.
IPv4点分十进制192.168.0.1
IPv6点分十进制::192.168.0.1
IPv6点分十六进制::C0A8:0001

特殊的IP地址:

IP地址地址类型作用
0.0.0.0通配地址主机上所有IP,多网卡共用
127.0.0.1回环地址本地虚拟接口,无网卡可用,检查本地网络协议
255.255.255.255广播地址受限广播地址,当前路由器均不转发此类广播
XXX.XXX.XXX.255广播地址子网广播地址
XXX.XXX.255.255广播地址全子网广播
224.0.0.0 ~ 239.255.255.255组播地址详细参见组播地址分类

组播地址分类:

范围名称作用
224.0.0.0 ~ 224.0.0.255链路组播地址路由协议和其它用途保留的地址
224.0.1.0 ~ 238.255.255.255用户组播地址用于全球范围(如Internet)或网络协议
239.0.0.0 ~ 239.255.255.255本地组播地址内部使用

域名: DNS(Domain Name System,域名系统),作为域名和IP地址相互映射的一个分布式数据库

3.2 端口

区分一台主机接收到的数据包应该转交给哪个进程来进行处理

查看端口: netstat –apn

类比于:火车站与站台、飞机场与登机口、公司与办公室、银行与窗口柜台、IP与端口

4. 字节序

类型简写本质e.g.
大端BE(big endian)将高序字节存储在起始地址IBM、网络
小端LE(little endian)将低序字节存储在起始地址Intel

查看当前CPU支持的字节序: lscpu
在这里插入图片描述

  • 11
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值