1.Unix第二章
UDP(用户数据报协议):
简介:UDP是一个简单的传输层协议,程序往进程一个UDP套接字写入一个消息,改消息随后被分装得到一个UDP数据报,UDP数据报又被封装成一个IP数据报。
优点:UDP属于无连接型协议,因此有资源消耗小,处理速度快等优点。
缺点:UDP缺乏可靠性,UDP不保证数据报会到达目的地,也不保证先后顺序,也不保证只到达目的地一次。
TCP(传输控制协议):
简介:TCP客户先与某个给定的服务器建立连接,利用这个连接进行交换数据,然后关闭该连接。
建立一个TCP连接需要3次握手,关闭一个TCP连接需要4次握手
优点:
1.可靠性,有序性:TCP向另外一段发送数据的时候,要求对端返回一个确认,如果没有收到确认, TCP就自动重传该消息,后面的消息则不会发,在规定时间内一直没有成功,则关闭这个连接, 保证的有序性。
2.流量控制:TCP告知对面在任何时刻他一次能够从对端接受多少字节的数据,发送多少数据,则接受多少数据。
3.全双工:在给定的一个连接的双方都能相互的收发数据。
SCTP(流控制协议):
简介:SCTP提供的服务像UDP与TCP综合,SCTP中使用“关联”取代“连接”,连接是指2个IP地址之间的通信,关联是2个系统之间的一次通信。
建立一次关联需要4次握手,关闭一个关联需要3次握手。
优点:
1.多宿性:sctp端点能够支持多个ip地址,建立多个关联,关联之间互不影响。
2.流内有序性:在同一个流传递的消息具有有序性,不在同一个流的消息不具有有序性。
缺点:
思考:sctp是否会代替tcp协议?
Unix第三章字节排序函数
内存中有2个方法存储,一种是小端:将低序字节存储在起始地址,一种是大端:将高序字节存储到起始地址。我们公司服务器用的是小端。
网络字节序:是TCP/IP中规定的一种数据表示格式,与具体的CPU,操作系统无关,从而保证数据在不同主机之间的传输能够被正确的解释。网络字节序是采用大端的排序方式。
主机字节序:是数据在主机的存储方式,存储方式有大端和小端2种方式。
网络字节序和主机字节序的相互转化:
htons把unsigned short类型从主机序转换到网络序。
htonl把unsigned long类型从主机序转换到网络序。
ntohs把unsigned short类型从网络序转换到主机序。
ntohl把unsigned long类型从网络序转换到主机序。
int inet_aton(const char* strptr, struct
in_addr * addrptr)将C字符串转化成32位的网络字节序二进制值,并用addrptr存储。
in_addr_t inet_addr(const char * strptr)与上面一样,但是不能处理255.255.255.255,如今已经废弃。
char *inet_ntoa(struct in_addr inaddr)将32位的网络字节序二进制值转化成字符串。
字节流套接字上调用read和write输入和输出字节数可能比请求的数量少,是因为内核中用户套接字的缓冲区达到极限,需要再起调用read和write继续读取数据。