socket简介

一、socket简介

1、什么是socket套接字?

在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。socket是对tcp/IP协议的封装,socket本身并不是协议,而是一个调用接口(api)。通过socket才能使用TCP/IP协议。socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了一些最基本的函数接口。

2、socket套接字提供的接口

下面的图中介绍了,客户端与服务端进行通信时调用的接口,以及对应的socket状态变化。如下:

在这里插入图片描述

3、socket缓冲区

每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区。write()/send() 并不立即向网络中传输数据,而是先将数据写入缓冲区中,再由TCP协议将数据从缓冲区发送到目标机器。一旦将数据写入到缓冲区,函数就可以成功返回,不管它们有没有到达目标机器,也不管它们何时被发送到网络,这些都是TCP协议负责的事情。TCP协议独立于 write()/send() 函数,数据有可能刚被写入缓冲区就发送到网络,也可能在缓冲区中不断积压,多次写入的数据被一次性发送到网络,这取决于当时的网络情况、当前线程是否空闲等诸多因素,不由程序员控制。read()/recv() 函数也是如此,也从输入缓冲区中读取数据,而不是直接从网络中读取。

在这里插入图片描述

4、套接字类型

套接字有3种不同类型:流式套接字(SOCK_STREAM)、数据报套接字(SOCK_DGRAM)和原始套接字
1)流套接字用来实现TCP通信,提供了面向连接的、可靠的、数据无错且无重复的数据传输服务,并且发送和接收的数据的顺序是相同的
2)数据报套接字用来实现UDP通信,提供了面向无连接的服务,它以独立的数据报形式发送数据(数据包的长度不能大于32KB),不提供正确性检查,也不保证各数据包的发送和接收顺序,所以可能会出现数据重发、丢失等情况
3)原始套接字用来实现IP数据包通信,用于直接访问协议的较低层,常用于侦听及分析数据包,广泛应用于高级网络编程,也是一种经常使用的黑客手段

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值