《TCP/IP网络编程》笔记——第2章 套接字类型和协议设置

1、创建套接字

#include 

int socket(int domain,int type,int protocol);
  • domain:套接字中使用的协议族(protocol family)信息
  • type:套接字数据传输类型信息
  • protocol:计算机间通信中使用的协议信息

2、协议族

《TCP/IP网络编程》笔记——第2章 套接字类型和协议设置_第1张图片

  • 常用PF_INET,即ipv4

3、套接字类型

(1)面向连接的套接字(SOCK_STREAM)

  • 特点:
    • 传输过程中数据不会消失
    • 按序传输数据
    • 传输的数据不存在数据边界:即接收端存在缓冲区,多次写入缓冲区的数据,接收端可能一次就能读完(即传输数据次数和接收数据次数可以不一样)
    • 一一对应,基于字节传输

套接字缓冲满是否意味数据丢失?

  • 当套接字缓冲满时,传输端停止传输,也就是说面向连接的套接字会根据接收端的状态传输数据。
  • 若传输出错还会提供重传服务,故除特殊情况外不会发生数据丢失

(2)面向消息的套接字(SOCK_DGRAM)

  • 特点:
    • 强调快速传输而非传输顺序(故速度比面向连接快,且不按序)
    • 传输数据可能丢失也可能损毁
    • 传输数据有数据边界(接收数据次数和传输次数相同)
    • 限制每次传输的数据大小

4、协议最终选择

  • 一般情况下,传递前两个参数既可创建所需套接字,故可以直接传0.
  • 但是可能出现在同一协议族中存在多个数据传输方式相同的协议,此时就要传入第三个参数具体指定协议信息。
  • 例:
//创建ipv4版tcp连接socket
int tcp_socket=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);//IPPROTO_TCP可以直接写0

//创建ipv4版udp连接socket
int udp_socket=socket(FP_INET,SOCK_STREAM,IPPROTO_UDP);

5、习题

  • 什么是协议?在收发数据中定义协议有何意义?

协议就是为了完成数据交换而定好的约定。因此,定义协议意味着对数据传输所必需的的承诺进行定义。

  • 面向连接的TCP套接字传输特性有3点,请分别说明.
  • 有序传输
  • 数据传输时没有数据边界
  • 传输过程中数据不会消失
  • 何种类型的套接字不存在数据边界?这类套接字接收数据时需要注意什么?

面向连接的套接字不存在数据边界。因此输入输出函数的响应次数不具有意义。重要的不是函数的响应次数,而是数据的收发量。因此,必须将传输数据的量和接收数据的量制作成编码,保证发送数据的量和接收数据的量是一致的,特别要注意是制作依赖函数响应次数判断代码

你可能感兴趣的:(TCP/IP网络编程读书笔记,网络,tcp/ip,服务器)