您的位置:首页 > 理论基础 > 计算机网络

Unix网络编程—传输层:TCP和UDP

2013-05-05 22:53 204 查看
第二章、传输层:TCP、UDP和SCTP
1、用户数据报协议(UDP)
1)描述
应用程序往一个UDP套接字写入一条消息,该消息随后被封装到一个UDP数据包,又被封装到一个IP数据报,然后发往目的地
2)特点
①缺乏可靠性
数据报到达目的地,但是检验和检测有错误,或者该数据报在网络传输被丢弃,不会自动重传。不会保证先后顺序,不保证数据重复处理
②无连接
客户与服务器不存在长期的关系。客户可以创建套接字并发送数据报到给定服务器,然后立即用同一套接字发送另一个数据报给另一个服务器

2、传输控制协议(TCP)
1)特点
①面向连接
提供客户与服务器之间的连接。先建立连接,跨连接交换数据,终止连接
②可靠性
当TCP向另一端发送数据时,它要求另一端返回一个确认。如果没有收到确认,TCP自动重传数据并等待一段时间。数次重传失败,TCP才放弃
注:TCP并不保证数据一定被对方端点接受。提供的是数据的可靠递送或故障的可靠通知
含有动态估算客户和服务器之前的往返时间的算法(RTT)
通过给其中每个字节关联一个序列号对所发送的数据进行排序
③流量控制
滑动窗口:通知对端在任何时刻能够接受多少字节的数据
在任何时刻,该窗口指出接受缓冲区中当前可用的空间量,确保不会发生溢出
④全双工
一个连接在两个方向发送数据和接收数据

3、TCP连接的建立和终止
1)三路握手
①服务器准备好接受客户的连接。通过调用socket、bind和listen完成工作,称为被动打开
②客户调用connect发起主动连接,导致客户TCP发送一个SYN分节,告诉服务器在连接中发送数据的初始序列号。通常不带数据
③服务器必须确认(ACK)客户的SYN,同时发送一个SYN分节,含有服务器在同一连接中发送数据的初始序列号。
④客户必须确认服务器的SYN
ACK确认号是发送这个ACK的一端所期待的下一个序列号,每个FIN(表示结束)的ACK的确认号同样加1



2)TCP连接终止
①某个应用进程调用close,称为执行主动关闭。发送一个FIN分节,表示数据发送完毕
②接受到这个FIN的对端执行被动关闭。它的接受作为一个文件结束符,因为FIN的接受意味着再无额外数据可接收
③一段时间,接收到文件结束符的应用进程调用close关闭它的套接字。导致它的TCP发送一个FIN
④接收到这个最终FIN的原发送端TCP确认这个FIN



3)TCP状态转换图
①建立连接
主动:CLOSE——SYN_SENT——ESTABLISHED
被动:CLOSE——LISTEN——SYN_RCVD——ESTABLISHED
②断开连接
主动:ESTABLISHED——FIN_WAIT_1——FIN_WAIT_2——TIME_WAIT
被动:ESTABLISHED——CLOSE_WAIT——LAST_ACK



4、TIME_WAIT状态
MSL:最长分节生命期。任何IP数据报能够在因特网中存活的最长时间
重复的分组:分组在网络中迷途。某个路由器损坏导致路由循环,发送端TCP超时重传,修复后迷失的分组也被送到目的地
TIME_WAIT停留在这个状态的持续时间是2MSL
存在理由:
1)可靠地实现TCP全双工连接的终止
2)允许老的重复分节在网络中消逝

5、端口号
端口号:16位整数
服务器一般采用众所周知的端口号,客户使用临时端口号,只需确保唯一性
划分:
1)众所周知的端口为0-1023
2)已登记的端口为1024-49151
3)动态或私用的端口为49152-65535
套接字对:一个TCP连接的两个端点的四元组

6、TCP端口号与并发服务器
并发服务器:主服务器循环通过fork派生一个子进程来处理每个新的连接
多宿主机:一个机器有多个IP
1)监听套接字
服务器在某个或任意本地接口的端口等待连接请求,外地IP地址和端口没有指定
例:{*:21,*:*} *星号表示通配符,通配的地址表示任意,套接字地址IP地址字段设置为INADDR_ANY
2)已连接套接字
使用与监听套接字相同的本地端口。连接一旦建立,已连接套接字的本地地址随即填入
TCP必须通过套接字对的所有4个元素才能确定由哪个端点接受某个到达的分节

7、缓冲区大小及限制
1)TCP输出
①当应用进程调用write,内核从应用进程的缓冲区复制所有数据到所写套接字的发送缓冲区
②如果缓冲区空间不够,则应用进程被投入睡眠。
③内核不从write系统调用返回,直到应用进程缓冲区中所有数据都复制到套接字发送缓冲区
注:成功返回仅仅代表可重新使用应用进程缓冲区,不表明对端TCP或应用进程已接收到数据
④对端必须确认收到的数据,收到对段的ACK,本端TCP才能从套接字发送缓冲区丢弃已确认的数据(之前必须保留数据的副本,直到被确认)
⑤本端TCP以MSS大小或更小的块把数据传递给IP,同时每个数据安上一个TCP首部构成TCP分节
注:MSS或是由对端通告的值,或是536。536是IPv4最小重组缓冲区字节数576减去ip首部字节数20和TCP首部字节数20的结果



8、常见因特网应用的协议使用

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  网络编程 TCPIP