嵌入式Linux网络编程——TCP/IP概述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q1449516487/article/details/81535148

一、OSI参考模型和TCP/IP参考模型

       著名的OSI协议参考模型由国际标准化组织(ISO)提出,从上到下共7层,分为应用层、表示层、会化层、传输层、网络层、数据链路层和物理层。TCP/IPC协议由OSI简化而来,分为应用层、传输层、网络层和网络接口层。

TCP/IP模型和ISO模型对比
ISO/OSI模型                                                          TCP/IP协议 TCP/IP模型
应用层

文件传输协议

    (FTP)

远程登录协议

  (Telnet)

电子邮件协议

  (SMTP)

网络文件服务协议

       (NFS)

网络管理协议

(SNMP)

应用层
表示层
会话层
传输层                                      TCP                                                              UDP 传输层
网络层                     ICMP                       IGMP           IP 网络层
数据链路层                                                          ARP、RARP 网络接口层
物理层

Ethemet IEEE

802.3

       FDDI

Token-Ring/

 IEEE 802.5

        ARCnet      PPP/SLIP

二、TCP/IP协议族

       TCP/IP协议名称上只包含了两个协议,但实际上它是一个庞大大的协议族。TCP/IP协议族如上图所示,包含了以下协议:

应用层 telnet 是Internet远程登录服务的标准协议和主要方式。
ftp 用于Internet上的控制文件的双向传输。
传输层 TCP 为应用程序提供可靠的通信连接。适合于一次传输大批数据的情况。并适用于要求得到相应的应用程序。
UDP 提供无连接通信,且不对传输包进行可靠保证。适合于一次传输少量数据,可靠性则由应用层来负责。
传输层 ICMP 用于发送有关数据包的传送错误的协议。
IGMP 被IP主机用来向本地多路广播路由器报告主机成员的协议。
IP 负责在主机和网络之间寻址和路由数据包。
网络接口层 ARP 用于获得同一物理网络中的硬件主机地址。
MPLS 多协议标签协议,是很有发展前景的下一代网络协议。

三、TCP和UDP

1.TCP

(1)TCP概述

       TCP数据传输实现了从一个应用程序到另一个应用程序的数据传递。应该程序通过编程调用TCP并使用TCP服务,提供需要准备发送的数据,用来区分接收数据的目的地址和端口号。

       通常应用程序通过打开一个socket来使用TCP服务,TCP管理到其他socket的数据传递。通过IP的源/目的可以唯一地区分网络中的两个设备的连接,通过socket的源/目的可以唯一地区分网络中的两个应用程序的连接。

(2)三次握手协议

      TCP对话通过三次握手来进行初始化。三次握手的目的是使数据段的发送和接收同步,告诉其他主机其一次可接收的数据量,并建立虚连接。

       三次握手的简单过程:

(1) 初始化主机通过一个同步标志位的数据段发出会话请求。(请求主机(--SYN J-->)应答主机)
(2) 接收主机通过发回具有以下项目的数据段表示回复:同步标志置位、即将发送的数据段的起始字节的顺序号、应答并带有将受到的下一个数据段的字节顺序号。(请求主机(<--SYN K,ACK J +1--)应答主机)
(3) 请求主机再回送一个数据段,并带有确认顺序号和确认号。(请求主机(--ACK K+1-->)应答主机)

(3)TCP数据报头

TCP数据报头的格式
                               源端口                                  目的端口
                                                                         顺序号
                                                                         确认号

TCP

头长

 

U

R

G

A

C

K

P

S

H

R

S

T

S

Y

N

F

I

N

                                  窗口大小
                              校验和                                   紧急指针
                                                        可选项(0或更多的32位字)
                                                                  数据(可选项)
TCP数据报含义
源端口、目的端口: 16位长。标识出远端和本地的端口号。
顺序号: 32位长。标识发送的数据报的顺序。
确认号: 32位长。希望收到的下一个数据包的序列号。
TCP头长: 4位长。表明TCP头中包含多少个32为字。
6位未用: 未用。
ACK: ACK位置1表明确认号是合法的。如果ACK为0,那么数据报不包含确认信息,确认字段被省略。
PSH: 表示是带有PUSH标志的数据。接收方因此请求数据包一到便将其送往应用程序而不必等到缓冲区装满时才传送。
RST: 用于复位由于主机奔溃或其他原因而出现的错误连接。还可以用于拒绝非法的数据包或拒绝连接请求。
SYN: 用于建立连接。
FIN: 用于释放连接。
窗口大小: 16位长。窗口大小字段表示在确认了字节之后还可以发送多少个字节。
校验和: 16位长。是为了确保高可靠性而设置的。它校验头部、数据和伪TCP头部之和。
可选项: 0个或多个32位字。包括最大TCP载荷,滑动窗口比例以及选择重发数据包等选项。

2.UDP

(1)UDP概述

        UDP即用户数据报协议,它是一种无连接协议,不需要像TCP那样通过三次握手建立连接。一个UDP应用可以同时作为应用的客户或服务器方。由于UDP协议并不需要建立一个明确的连接,因此它的创建比TCP简单很多。UDP主要用于解决网络的实时性问题,如今包括网络视频会议系统在内的众多客户/服务器模式的网络应用都使用UDP协议。

(2)UDP数据报头

UDP数据报格式
16位源端口号 16位目的端口号
16位UDP长度 16位UDP检验和

                                             

                                             数据(如果有)

UDP数据报含义
源端口号: 标识出本地端口号。
目的端口号: 标识远端端口号。
UDP长度: 包括报头和数据部分在内的总的字节数。
UDP检验和: 是为了确保高可靠性而设置的。
数据: UDP数据部分。

3.协议的选择

   协议的选择应该考虑到以下3个方面:

对数据的可靠性的要求: 对数据要求高可靠性的应用需选择TCP协议,如验证、密码字段的传送都是不允许出错的,而对数据的可靠性要求不那么高的应用可选择UDP传送。
应用的实时性: TCP协议在传送过程中要使用三次握手、重传确认等手段来保证数据传输的可靠性。使用TCP协议会有较大的时延,因此不适合都实时性要求较高的应用,如VoIP、视频监控等。相反,UDP协议则在这些应用中能发挥很好的作用。
网络的可靠性: 由于TCP协议的提出主要是解决网络的可靠性问题,它通过各种机制来减少错误发生的概率。因此,在网络状况不是很好的情况下需选用TCP协议(如广域网等情况),但是若在网络状况很好的情况下(如局域网等)就不需要再采用TCP协议,而建议选择UDP协议来减少网络负荷。

猜你喜欢

转载自blog.csdn.net/q1449516487/article/details/81535148