[架构之路-43]:目标系统 - 系统软件 - Linux下的网络通信-3-TCP/IP协议族:IPTCP/UDP/SCTPSocket应用层协议
Posted 文火冰糖的硅基工坊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[架构之路-43]:目标系统 - 系统软件 - Linux下的网络通信-3-TCP/IP协议族:IPTCP/UDP/SCTPSocket应用层协议相关的知识,希望对你有一定的参考价值。
目录
第1章 TCP/IP协议简介
1.1 简介
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
1.2 协议栈
TCP/IP传输协议,即传输控制/网络协议,也叫作网络通讯协议。它是在网络的使用中的最基本的通信协议。TCP/IP传输协议对互联网中各部分进行通信的标准和方法进行了规定。并且,TCP/IP传输协议是保证网络数据信息及时、完整传输的两个重要的协议。TCP/IP传输协议是严格来说是一个四层的体系结构,应用层、传输层、网络层和数据链路层都包含其中。
TCP/IP协议是Internet最基本的协议,其中
应用层的主要协议有Telnet、FTP、SMTP等,是用来接收来自传输层的数据或者按不同应用要求与方式将数据传输至传输层;
传输层的主要协议有UDP、TCP,是使用者使用平台和计算机信息网内部数据结合的通道,可以实现数据传输与数据共享;
网络层的主要协议有ICMP、IP、IGMP,主要负责网络中数据包的传送等;
而网络访问层,也叫网络接口层或数据链路层,主要协议有ARP、RARP,主要功能是提供链路管理错误检测、对不同通信媒介有关信息细节问题进行有效处理等。
虽然TCP/IP协议族被称为“TCP/IP”,但除了TCP和IP这两个主要协议外,还有许多其他成员。
如下图所示:
下面简单介绍一下图中的每一个协议框。
(1)IPV4 它使用32为地址
IPV4给TCP、UDP、SCTP、ICMP和IGMP提供分组递送服务。
(2)IPV6 使用128位更大地址。
IPV6给TCP、UDP、SCTP和ICMPv6提供分组递送服务。
(3)TCP 传输控制协议:面向连接的协议
TCP是一个面向连接的协议,为用户进程提供可靠的全双工字节流。TCP套接字是一种流套接字。TCP关心确认、超时、和重传之类的细节。注意,TCP既可以使用IPV4,也可以使用IPV6。
UDP 用户数据包协议。UDP是一个无连接协议。UDP套接字是一种数据报套接字。UDP数据报不能保证最终到达它们的目的地。与TCP一样,UDP既可以使用IPV4,也可以使用IPV6。
(4)SCTP 流控制传输协议
SCTP是一个提供可靠全双工关联的面向连接的协议,我们使用“关联”一词指称SCTP中的连接,因为SCTP是多宿的,从而每个关联的两端均涉及一组IP地址和一个端口号。有点类似隧道。
SCTP提供消息服务,也就是维护来自应用层的记录边界。
与TCP和UDP一样,SCTP既可以使用IPV4,也可以使用IPV6,而且能够在同一个关联中同时使用它们。
(5)ICMP 网际控制消息协议。
ICMP处理在路由器和主机之间流通的错误和控制消息。
这些消息通常由TCP/IP网络支持软件本身(而不是用户进程)产生和处理,不过图中展示的ping和traceroute程序同样使用ICMP。
有时我们称这个协议为ICMPv4,以便与ICMPv6相区别。
IGMP 网际组管理协议。IGMP用于多遍,它在IPV4中是可选的。
(6)ARP 地址解析协议。
ARP把一个IPV4地址映射成一个硬件地址(如以太网地址)。ARP通常用于诸如以太网、令牌环网和FDDI等广播地址,在点对点网络上并不需要。
(7)RARP 反向地址解析协议。
RARP把一个硬件地址映射成一个IPV4地址。它有时用于无盘点的引导。
(8)BPF BSD分组过滤器。
该接口提供对于数据链路层的访问能力。
(9)DLPI 数据链路提供者接口。
该接口也提供对于数据链路层的访问能力,通常随SVR4内核提供。
1.3 IP网络
IP网络是通过IP路由器和IP终端组成分层网络。
第2章 IP协议
2.1 简介
IP指网际互连协议,Internet Protocol的缩写,是TCP/IP体系中的网络层协议。设计IP的目的是提高网络的可扩展性:一是解决互联网问题,实现大规模、异构网络的互联互通;二是分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务。
IP是整个TCP/IP协议族的核心,也是构成互联网的基础。IP位于TCP/IP模型的网络层(相当于OSI模型的网络层),它可以向传输层提供各种协议的信息,例如TCP、UDP等;对下可将IP信息包放到链路层,通过以太网、令牌环网络等各种技术来传送。 [2]
为了能适应异构网络,IP强调适应性、简洁性和可操作性,并在可靠性做了一定的牺牲。IP不保证分组的交付时限和可靠性,所传送分组有可能出现丢失、重复、延迟或乱序等问题。
2.2 IP功能
(1)基于IP分组的转发与路由(最基本的功能)
路由器仅根据网络地址进行转发。当IP数据包经由路由器转发时,如果目标网络与本地路由器直接相连,则直接将数据包交付给目标主机,这称为直接交付;否则,路由器通过路由表查找路由信息,并将数据包转交给指明的下一跳路由器,这称为间接交付。路由器在间接交付中,若路由表中有到达目标网络的路由,则把数据包传送给路由表指明的下一跳路由器;如果没有路由,但路由表中有一个默认路由,则把数据包传送给指明的默认路由器;如果两者都没有,则丢弃数据包并报告错误。
(2)IP分片与重组
一个IP包从源主机传输到目标主机可能需要经过多个不同的物理网络。
由于各种物理网络的数据帧都有一个最大传输单元(MTU)的限制,如以太网帧的MTU是1500;
因此,当路由器在转发IP包时,如果数据包的大小超过了出口链路的最大传输单元时,则会将该IP分组分解成很多足够小的片段,以便能够在目标链路上进行传输。
在接收端,IP层会把这些IP分片重组成一个完成的IP数据包。
2.3 IP V4分组结构
一个IP分组由首部和数据两部分组成。
首部的前20字节是所有IP分组必须具有的,也称固定首部。
在首部固定部分的后面是一些可选字段,其长度是可变的。
2.4 IP V4地址
IP协议中还有一个非常重要的内容,那就是给因特网上的每台计算机和其它设备都规定了一个唯一的地址,叫做“IP地址”。由于有这种唯一的地址,才保证了用户在连网的计算机上操作时,能够高效而且方便地从千千万万台计算机中选出自己所需的对象来。
IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。
IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
IP地址就像是我们的家庭住址一样,如果你要写信给一个人,你就要知道他(她)的地址,这样邮递员才能把信送到。计算机发送信息就好比是邮递员,它必须知道唯一的“家庭地址”才能不至于把信送错人家。只不过我们的地址是用文字来表示的,计算机的地址用二进制数字表示。
IP地址被用来给Internet上的电脑一个编号。大家日常见到的情况是每台联网的PC上都需要有IP地址,才能正常通信。我们可以把“个人计算机”比作“一台电话”,那么“IP地址”就相当于“电话号码”,而Internet中的路由器,就相当于电信局的“程控式交换机”。
IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。
2.5 IP V6地址
IPv6的优势就在于它大大地扩展了地址的可用空间,IPv6地址有128位长。如果地球表面(含陆地和水面)都覆盖着计算机,那么IPv6允许每平方米拥有7*10^23个IP地址;如果地址分配的速率是每微秒100万个,那么需要10^19年才能将所有的地址分配完毕。
2.6 IPV4地址与IPV6地址比较
2.5 路由器
路由器(Router)是连接两个或多个网络的硬件设备,在网络间起网关的作用,是读取每一个数据包中的地址然后决定如何传送的专用智能性的网络设备。它能够理解不同的协议,例如某个局域网使用的以太网协议,因特网使用的TCP/IP协议。这样,路由器可以分析各种不同类型网络传来的数据包的目的地址,把非TCP/IP网络的地址转换成TCP/IP地址,或者反之;再根据选定的路由算法把各数据包按最佳路线传送到指定位置。所以路由器也可以把非TCP/IP网络连接到因特网上。
2.6 路由协议
路由协议(英语:Routing protocol)是一种指定数据包转送方式的网上协议。
Internet网络的主要节点设备是路由器,路由器通过路由表来转发接收到的数据。
转发策略可以是人工指定的(通过静态路由、策略路由等方法)。在具有较小规模的网络中,人工指定转发策略没有任何问题。
但是在具有较大规模的网络中(如跨国企业网络、ISP网络),如果通过人工指定转发策略,将会给网络管理员带来巨大的工作量,并且在管理、维护路由表上也变得十分困难。
为了解决这个问题,动态路由协议应运而生。
动态路由协议可以让路由器自动学习到其他路由器的网络,并且网络拓扑发生改变后自动更新路由表。
网络管理员只需要配置动态路由协议即可,相比人工指定转发策略,工作量大大减少。
路由协议通过在路由器之间共享路由信息来支持可路由协议。路由信息在相邻路由器之间传递,确保所有路由器知道到其它路由器的路径。总之,路由协议创建了路由表,描述了网络拓扑结构;路由协议与路由器协同工作,执行路由选择和数据包转发功能。
路由协议主要运行于路由器上,路由协议是用来确定到达路径的,它包括RIP,IGRP(Cisco私有协议),EIGRP(Cisco私有协议),OSPF,IS-IS,BGP。起到一个地图导航,负责找路的作用。它工作在网络层。
2.7 IPV4与IPV6双栈
互联网业务的IPv6改造不会一蹴而就,这还受限终端及运营商网络的IPv6能力,所以IPv4业务和IPv6业务并存将会持续很长时间。而数据中心作为应用基础设施的重要部分,需要同时支撑IPv4业务和IPv6业务,双栈部署是最重要的技术手段。
(1)IPv6终端
(2)IPV4终端
(3)IPV4/V6双栈终端
第3章 TCP、UDP、SCTP协议
3.1 用户数据包协议(UDP)
UDP是一个简单的传输层协议。
应用进程往一个UDP套接字写入一个消息,该消息随后被封装到一个UDP数据报,该UDP数据报进而又被封装成一个IP数据报,然后发往到目的地。
UDP不保证UDP数据报会到达其最终目的地,不保证各个数据报的先后顺序跨网络后保持不变,也不保证每个数据报只到达一次。
每个UDP数据报都有一个长度。如果一个数据报正确地到达其目的地,那么该数据报的长度将随数据一道传递给接收端应用进程。
TCP是一个字节流协议,没有任何记录边界,这一点不同于UDP。
UDP提供无连接的服务,因为UDP客户与服务器之间不必存在任何长期的关系。
举例来说,一个UDP客户可以创建一个套接字并发送一个数据报给一个给定的服务器,然后立即用同一个套接字发送另一个数据报给另一个服务器。
同样地,一个UDP服务器可以用同一个UDP套接字从若干个不同的客户接收数据报,每个客户一个数据报。
3.3 传输控制协议(TCP)
由TCP向应用进程提供的服务不同于由UDP提供的服务。
(1)面向连接的通信
TCP提供客户与服务器之间的连接。TCP客户先与某个给定服务器建立一个连接,再跨该连接与那个服务器交换数据,然后终止这个连接。
(2)可靠性的通信
当TCP向另一端发生数据时,它要求对端返回一个确认。如果没有收到确认,TCP就自动重传数据并等待更长的时间。在数次重传失败后,TCP才放弃,如此在尝试发送数据上所花的总时间一般为4~10分钟。
(3)自动排序与重复性检测
TCP通过给其中每个自己关联一个序列号对所发送的数据进行排序。
举例来说,假设一个应用写2048字节到一个TCP套接字,导致TCP发送2个分节:第一个分节所含数据的序列号为1~1024,第二个分节所含数据的序列号1025~2048.(分节是TCP传递给IP的数据单元。)如果这些分节非顺序到达,接收端TCP将先根据它们的序列号重新排序,再把结果数据传递给接受应用。如果接收端TCP接收到来自对端的重复数据,它可以判定数据是重复的,从而丢弃重复数据。
(4)TCP提供流量控制。
TCP总是告知对端在任何时刻它一次能够从对端接收多少字节的数据,这称为通告窗口。
在任何时刻,该窗口指出接收缓冲区中当前可用的空间量,从而确保发送端发送的数据不会使接收缓冲区溢出。
该窗口时刻动态变化:当接收到来自发送端的数据时,窗口大小就减小,但是当接收端应用从缓冲区中读取数据时,窗口大小就增大。
通告窗口大小减小到0是可能的:当TCP对应某个套接字的接收缓冲区已满,导致它必须等待应用从该缓冲区读取数据时,方能从对端再接收数据。
3.4 流控制传输协议(SCTP)
SCTP提供的服务与UDP和TCP提供的类似。
SCTP在客户和服务器之间提供关联,并像TCP那样给应用提供可靠性、排序、流量控制以及全双工的数据传送。
SCTP中使用“关联”一词取代“连接”是为了避免这样的内涵,一个连接口涉及两个IP地址之间的通信。一个关联指代两个系统之间的一次通信,它可能因为SCTP支持多宿而涉及不止两个地址。
(1)SCTP能够在所连接的端点之间提供多个流
下图是一个 SCTP 多重串流的示意图,SCTP 两端点通过一条 SCTP 连线(association)进行通讯,在接收与传送的部份,可使用多个串流进行数据的传送与接收。
一个“关联”Association 是由多个单向的“流”(Stream)组成的。各个流之间相对独立,可以单独发送数据而不受其它流的影响,也可以共同实现用户数据的有序递交。
这样做理论上的好处是,如果其中某一条流由于丢包阻塞了,那只会影响到这一条流,其他的流并不会被阻塞。
只有所有的流都被阻塞,SCTP连接中断。
这种做法与TCP正好相反,就TCP而言,在单一字节流中任何位置的字节丢失都将阻塞该连接上其后所有数据的递送,直到该丢失被修复为止。
SCTP的多重串流特性有别于传统的 TCP 通讯协定单一串流(single-stream):
当端点建立连线时,可预先相互协调将要使用的串流数量,并且能够将不同类型的数据分别以不同的串流传输。
当其中一个串流正在等待重新传送的讯息时,其他串流仍然能够继续传送。
在每个串流中的 data chunk 都会有各自运作的的串流序号(SSN, stream sequence number),因此在某一个串流的封包重送动作并不会使其他串流因等待重送的封包而造成延迟。
如应用于网页伺服器时,不需为了同时传输多个档桉而建立多个连线,网页与图片能够透过不同的串流传输,不需等待网页传输完毕,图片就能透过其他串流同时传输。
多重串流之功能可以改善原本因单一串流时,必须等待遗失封包之重送而产生的 HoL Blocking 延迟。
因此,SCTP连接的多个流特性,非常适合基站与信令网关之间为多用户终端提供信令传输。因为不同的用户之间有需要相互独立传输信令,不能相互干扰。
(2)面向消息的传输
每个流各自可靠地按序递送消息。
与TCP不同的是,SCTP是面向一个个独立的消息的。与UDP一样,由发送端写入的每条记录的长度随数据一道传递给接收端应用。
(3)多流有序传输
SCTP它提供各个记录的按序递送服务。
在同一条stream里面,SCTP支持有序/无序两种传输方式,应用程序在调用sendmsg()的时候,需要指定用哪一条stream传输,以及指定这条要发送的消息是需要有序传输还是无序传输的。
如果在传输过程中丢包,则有序传递模式可能会在接收端被阻塞,而无序传输模式不会在接收端被阻塞。
(3)SCTP提供多宿特性,多路径传输
TCP的两端都只能用一个IP来建立连接,连接建立之后就只能用这一对IP来相互收发消息了。如果这一对IP之间的路径出了问题,那这条TCP连接就不可用了。
SCTP不一样的地方是,两端都可以绑定到多个IP上,只要有其中一对IP网络通路正常,这条SCTP连接就还可以用。
这使得单个SCTP端点能够支持多个IP地址。该特性可以增强应当网络故障的健壮性。
一个端点可能有多个冗余的传输网络连接,每个网络又可能有各自接入因特网基础设施的连接。
当该端点与另一个端点建立一个关联后,如果它的某个网络或某个跨越因特网的通路发生故障,SCTP就可以通过切换到使用已有该关联的另一个地址来规避所发生的故障。
第4章 三种传输层协议比较
UDP:简单的、不可靠的、无连接的、提供消息边界的数据报协议
TCP:复杂的、可靠的、面向连接的、无消息边界的字节流协议
SCTP:可靠的、面向连接的,流控制传输协议,提供消息边界、传输级别多宿支持以及线头阻塞减少到最小的一种方法。
4.1 用户数据包协议(UDP)
(1)不可靠:
不保证UDP数据报会到达最终目的地,不保证各个数据包的先后顺序跨网络后保持不变,也不保证每个数据报只到达一次;
如果一个数据报到达了其最终目的地,但校验和检测发现有错误,或者数据报在网络传输途中被丢弃了,就无法投递给UDP套接字,也不会被源端自动重传;
(2)提供消息边界:
每个数据报都有一个长度。如果一个数据报正确地到达目的地,那么该数据报的长度将随数据一道传递给接收端应用进程;
(3)提供无连接服务:
比如,一个UDP客户可以创建一个套接字并发送一个数据报给一个给定的服务器,然后立即用同一个套接字发送另一个数据报给另一个服务器。
同样的,一个UDP服务器可以用同一个UDP套接字从若干个不同的客户接收数据报,每个客户一个数据报。
4.2 传输控制协议(TCP)
(1)面向连接:
TCP客户先于某个给定的服务器建立一个连接,再跨该连接与那个服务器交换数据,然后终止这个连接;
(2)可靠的:
当TCP向另一端发送数据时,它要求对端返回一个确认。如果没有收到确认,TCP就自动重传数据并等待更长时间。
在数次重传失败后,TCP才放弃,如此尝试发送数据上所花的总时间一般为4-10分钟(依赖于具体实现);
(3)含有用于动态估算客户和服务器之间的往返时间(RTT)的算法;
(4)自动排序:
通过给其中每个字节关联一个序列号对所发送的数据进行排序;
(5)提供流量控制。
总是告知对端在任何时刻它一次能够从对端接收多少字节的数据,这称为通过窗口;
(6)连接时全双工的;
4.3 流控制传输协议(SCTP)
(1)可靠性、面向连接:在客户和服务器之间提供关联,并像TCP那样给应用提供可靠性、排序、流量控制以及全双工的数据传送;
(2)多用户多IP地址:一个关联指代两个系统之间的一次通信,它可能因为SCTP支持多宿而设计不止两个地址;
(3)面向消息:与TCP面向流不同的是,SCTP是面向消息的。它提供各个记录的按序递送服务;
(4)多流:能够在所连接的端点之间提供多个流,每个流各自可靠第按序递送消息;
(5)提供多宿性,使得单个SCTP端点能够支持多个IP地址;
第5章 应用程序协议
5.1 概述
5.2 HTTP协议
(1)概述
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而 [9] 消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。
HTTP是基于B/S架构进行通信的,
HTTP的服务器端实现程序有httpd、nginx等,
其客户端的实现程序主要是Web浏览器,例如Firefox、Internet Explorer、Google Chrome、Safari、Opera等,
此外,客户端的命令行工具还有elink、curl等。
Web服务是基于TCP的,因此为了能够随时响应客户端的请求,Web服务器需要监听在80/TCP端口。这样客户端浏览器和Web服务器之间就可以通过HTTP进行通信了。
(2)HTTP的演进
- HTTPV1:非安全连接,构建在TCP之上
- HTTPS:安全连接,构建在TLS1.0/TCP之上
- HTTPV2:安全连接,支持流业务(视频),构建在TLS1.2之上。
- HTTPV3:安全连接,支持流业务(视频),构建在TLS1.3之上。
5.3 SSH协议
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的"通道"
第6章 UDP/TCP/STCP在LTE基站中的应用
UDP: 用于在基站与核心数据网关之间,承载业务用户面数据, 和同步面数据
TCP: 用于在基站与运营商网管中心之间,承载管理面数据,
SCTP: 用于在基站与核心信令网之间,承载信令面数据
由于TCP, UDP,SCTP属于TCP/IP协议栈的一部分,已经有成熟的软件,因此本文不做细节性的参数,重点参数这三种传输层协议之间的差别。
第7章 socket编程
7.1 概述
所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口。
套接字是通信的基石,是支持TCP/IP协议的路通信的基本操作单元。可以将套接字看作不同主机间的进程进行双间通信的端点,它构成了单个主机内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序),各种进程使用这个相同的域互相之间用Internet协议簇来进行通信
Socket(套接字)可以看成是两个网络应用程序进行通信时,各自通信连接中的端点,这是一个逻辑上的概念。它是网络环境中进程间通信的API(应用程序编程接口),也是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连进程。通信时其中一个网络应用程序将要传输的一段信息写入它所在主机的 Socket中,该 Socket通过与网络接口卡(NIC)相连的传输介质将这段信息送到另外一台主机的 Socket中,使对方能够接收到这段信息。 Socket是由IP地址和端口结合的,提供向应用层进程传送数据包的机制。
7.2 Socket的标识方法
套接字Socket=(IP地址:端口号),套接字的表示方法是点分十进制的lP地址后面写上端口号,中间用冒号或逗号隔开。每一个传输层连接唯一地被通信两端的两个端点(即两个套接字)所确定。例如:如果IP地址是210.37.145.1,而端口号是23,那么得到套接字就是(210.37.145.1:23)。
7.3 主要类型
(1)流套接字(SOCK_STREAM) =》 TCP
流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议 [3] 。
(2)数据报套接字(SOCK_DGRAM) =》UDP
数据报套接字提供一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接字使用UDP( User DatagramProtocol)协议进行数据的传输。由于数据报套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理 [3] 。
(3)原始套接字(SOCK_RAW) =》 RAW
原始套接字与标准套接字(标准套接字指的是前面介绍的流套接字和数据报套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送的数据必须使用原始套接
7.4 Socket编码模型
socket编程也叫套接字编程, 应用程序可以通过它发送或者接受数据,可对其像打开文件一样打开/关闭/读写等操作.
套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信.
网络套接字是IP地址与端口号TCP协议的组合
Socket就是为网络编程提供的一种机制,通信的两端都有Socket
网络通信其实就是Socket之间的通信,数据在两个Socket之间通过I/O进行传输.
在网络通信中,套接字一定是成对出现的, 一端的发送缓冲区对应对端的接收缓冲区。
7.5 TCP socket连接建立过程
以上是关于[架构之路-43]:目标系统 - 系统软件 - Linux下的网络通信-3-TCP/IP协议族:IPTCP/UDP/SCTPSocket应用层协议的主要内容,如果未能解决你的问题,请参考以下文章
[架构之路-135]-《软考-系统架构设计师》-软件工程-5-软件系统设计(面向对象设计基础)
[架构之路-23]:目标系统 - 系统软件 - C语言的结构与程序的工作原理 - 数据类型与数据定义(待续)
[架构之路-22]:目标系统 - 系统软件 - 汇编语言结构与X86指令系统以及CPU的工作原理函数调用与堆栈操作
[架构之路-24]:目标系统 - 系统软件 - C语言的结构与程序的工作原理 - 程序控制函数调用栈函数调用性能优化