网络编程入门教程03——socket机制

再一次地,把网络7层模型放在前面:
在这里插入图片描述

1. socket的位置

在介绍了传输层(TCP/UDP)、网络层(IP),理论上,我们已经可以开始编写应用程序来使用这些层了。然而由于这些协议过于复杂,操作系统在应用程序与协议栈之间提供一个软件接口socket套接口。
在这里插入图片描述
第一个值得注意的地方就是socket套接口的位置,套接字承上启下,应用层可直接使用套接口实现网络编程。

2. socket类型

  • socket有三种类型,数据报、流式、原始。显然,前两者分别对应UDP和TCP,第三种则对应不是上述两者协议的。
  • 注意,只有相同的套接口直接才能进行通信。

3. socket地址

  • 通用地址结构——sockaddr
    struct sockaddr {
        unsigned short sa_family;  // 地址家族
        char sa_data;              // 协议地址
    };
    
  • INET协议族地址结构——sockaddr_in
    struct sockaddr_in { 
        short sin_family;            //地址家族 
        u_short sin_port;            //端口号 
        struct in_addr sin_addr;     //IP 地址 
        unsigned char sin_zero[8];   //Unused 
    };
    
    其中,IPv4地址结构in_addr:
    
    struct in_addr {
        unsigned long s_addr;
    };
    

上述地址之间的关系如下所述:
在这里插入图片描述

4. socket及其地址的通俗解释

刚学习的时候可能会疑惑,为什么socket需要有地址?socket地址到底是什么?
socket可以理解为一个手机或者电话,仔细看socket地址的内容是IP和端口,也就是电话的号码(IP)与分机号(端口号)

  • 当往外打电话时,我们只需要知道对方的电话号码和分机号即可;所以socket如果只用来发送数据,无需手动绑定socket地址,操作系统会帮忙做。
  • 如果一部电话是用来接电话的,这部电话是必须先绑定好自己的电话号码和分机号;也就是说socket必须bind自己的socket地址。

5. 使用socket编程

socket相关的理论就先介绍到这里,在掌握了socket这个法宝之后就可以开始编程实现UDP或TCP通信了。
Linux网络编程06——UDP协议编程:https://blog.csdn.net/lianghe_work/article/details/45170699
Linux网络编程09——TCP编程之客户端:
https://blog.csdn.net/lianghe_work/article/details/46411927
Linux网络编程–tcp服务器:
https://blog.csdn.net/lianghe_work/article/details/46468001

6. 参考

  1. http://www.jiaochengku.net/ITjiaocheng/wangluobiancheng/41947.html
  2. http://homepage.smc.edu/morgan_david/cs70/sockets.htm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值