socket通信小结

(1) 地址结构

   地址结构有ipv4和ipv6之分;

  ipv4通用套接字地址结构

  struct sockaddr_in{

//结构长度    uint_8 length;   /*我认为不必须指出sockaddr_in的长度,并且事实上很多厂家也没有提供这个字段,而加上这个主要是为了方便处理变长套接口地址结构*/

//协议族       sa_family_t sin_family;  /*协议族   AF_INET

//端口地址    in_port_t   sin_port;  /*16位无符号整形*/

//ip地址     struct in_addr sin_addr;

//保留位     char sin_zero[8];

}

    struct in_addr {

   in_addr_t s_addr; //32位无符号整数类型

};//ip地址描述结构体


   通用套接口地址

  struct sockadd {

   uint8 length;

   sa_family_t sa_family;

   char sa_data[14];

}

  定义这个结构体的原因:在传递地址参数时,需要通过指针结构来传递,套接口处理函数必须支持所有的协议族套接字地址结构,ansi c 可以通过 void *,或者写一个通用的套接字地址结构。


  问题:

1,变长套接口出现在怎样的条件下?

  在《unix套接口编程》中有对此作简要的回答:“它是内核处理来自不同协议族的套接口地址结构的历程使用的”.


(2)  套接口编程重要步骤

  1, int socket(int domain,int type,int protocol);

  2,  bind(int sockfd,(struct sockaddr *) sockaddr_in ,socklen_t addr_length) ;

  3,  connect(int sockfd,const struct sockaddr *serveraddr,socklen_t seraddr_length);  

     --  listen(int sockfd,int backlog)
     -- accept(int sockfd,struct sockaddr * clientaddr,socklen_t clientaddr_length);

  4,   send(int sockfd,const void *msg,size_t len,int flags)
       sendto()
       sendmsg()

   
        recv()
        recvfrom()
        recvmsg()


(3)  tcp 三次握手以及为什么要使用三次握手

     三次握手的目的是为了同步客户和主机的序列号和确认号,并交换滑动窗口大小信息。第二次握手客户端获取到主机的序列号,但是此时主机不能确认客户端有没有收到,所以需要等待客户端的确认信息。


(4) 断开连接的四次挥手是怎么进行的?

断开连接的一端发送close请求是第一次握手,另外一端接收到断开连接的请求之后需要对close进行确认,发送一个消息,这是第二次握手,发送了确认消息之后还要向对端发送close消息,要关闭对对端的连接,这是第3次握手,而在最初发送断开连接的一端接收到消息之后,进入到一个很重要的状态time_wait状态,这个状态也是面试官经常问道的问题,最后一次握手是最初发送断开连接的一端接收到消息之后。对消息的确认。time_wait之后经过一个2msl等待时间,关闭正式结束。


(5)


    

  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值