网络编程预习2

1.TCP与UDP的区别

TCP:传输控制协议,为应用程序提供可靠的通信连接,适合一次传输大批数据的情况,并 适用要求得到相应的应用程序

UDP:用户数据包协议,提供无线连接通信,且不对传诵包进行可靠的保证,适合一次传输少量数据


2.TCP协议的含义

TCP是TCP/IP体系中面向连接的传输层协议,它提供全双工和可靠交付的服务,采用许多机制来确保端到端结点之间的可靠数据传输,如采用序列号,确认重传,滑动窗口等。


3.TCP协议三个主要步骤

1.首先,TCP为所发送的每一个报文段加上序列号,保证每一个报文段能被接收方接收,并只被正确地接收一次

2.其次,TCP采用具有重传功能的积极确认技术作为可考数据流传输服务的基础。

3.最后,采用可变长的滑动窗口协议进行流量控制,以防止由于发送端与接收端之间的不匹配而引起的数据丢失


4.三次握手协议含义

在利用TCP实现源主机与目的主机通信时,目的主机必须同意,否则TCP连接无法建立,为了确保TCP连接的成功建立,TCP采用了一种称为三次握手的方式,三次握手方式使得序号/确认号系统能够正常工作,从而使他们的序列号达成同步,如果三次我手成功,则连接建立成功,可以开始传送数据信息。


5.三次握手的三次内容

第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;
 第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包;
 第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。
 完成三次握手,主机A与主机B开始传送数据。


6.TCP数据报头信息含义

u32位端口号:
源端口和目的端口各占16位,2的16次方等于65536,看端口的命令:netstat。
u32位序号:
也称为顺序号(Sequence Number),简写为SEQ,
u32位确认序号:
也称为应答号(Acknowledgment Number),简写为ACK。在握手阶段,确认序号将发送方的序号加1作为回答。
u4位首部长度:
这个字段占4位,它的单位时32位(4个字节)。本例值为7,TCP的头长度为28字节,等于正常的长度2 0字节加上可选项8个字节。,TCP的头长度最长可为60字节(二进制1111换算为十进制为15,15*4字节=60字节)。
u6位标志字段:
ACK 置1时表示确认号(为合法,为0的时候表示数据段不包含确认信息,确认号被忽略。
RST 置1时重建连接。如果接收到RST位时候,通常发生了某些错误。
SYN 置1时用来发起一个连接。
FIN 置1时表示发端完成发送任务。用来释放连接,表明发送方已经没有数据发送了。
URG 紧急指针,告诉接收TCP模块紧要指针域指着紧要数据。注:一般不使用。
PSH 置1时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送。注:一般不使用。
u16位检验和:
检验和覆盖了整个的TCP报文段: TCP首部和TCP数据。这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。
u16位紧急指针:
注:一般不使用。
只有当U R G标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。
u可选与变长选项:
通常为空,可根据首部长度推算。用于发送方与接收方协商最大报文段长度(MSS),或在高速网络环境下作窗口调节因子时使用。首部字段还定义了一个时间戳选项。


7.协议的选择要求

1.对数据可靠性的要求。

2.应用的实时性

3.网络的可靠性


8.套接字的含义

套接字是操作系统内核中的一个数据结构,它是网络中的节点进行相互通信的门户,是网络进程的id,网络通信,归根结底还是进程间的通信,即不同计算机上的进程间通信,在网络中,每一个节点都有一个网络地址,也就是ip地址,两个进程通信时,首先要确定各自所在的网络节点的网络地址,但是,网络地址只能确定进程所在的计算机,而计算机上可能同时运行着多个程序,所以仅凭网络地址还不能确定到底要和网络中的哪一个进程进行通信,因此套接字中还需要包括其他信息,也就是端口号PORT。


9.Socket的概念

Socket是一种特殊的I/O接口,也是一种文件描述符,它是一种常用的进程之间通信机制,通过它不仅能实现本地机器上的进程之间的通信,而且通过网络能在不同机器上的进程之间进行通信。每一个Socket都用一个办相关的描述{协议,本地地址,本地端口}来表示,一个完整的套接字则用一个相关描述{协议,本地地址,本地端口,远程地址, 远程端口}来表示。


10.Socket的类型有哪些

流套接字(SOCK_STREAM):流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。


数据报套接字(SOCK_DGRAM):数据报套接字提供了一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接字使用UDP(User Datagram Protocol)协议进行数据的传输。由于数据包套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。


原始套接字(SOCK_RAW):原始套接字与标准套接字(标准套接字指的是前面介绍的流套接字和数据报套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送数据必须使用原始套接字。

猜你喜欢

转载自blog.csdn.net/cb673335723/article/details/78731400
今日推荐