在自己学习过程在,发现了一个很不错的网站,本篇文章也是基于自己在这个网站学习后,想给自己学习过程增加一些印象,所以写点东西让自己记得更牢一点,想要更多的了解,可以多多支持站长的工作,分享不易。

感谢站长的辛勤奉献:http://c.biancheng.net/

socket的定义

现在大学里面,只要是计算机相关专业,就离不开计算机网络这门课,里面会浅显的介绍一下socket,如果有幸学习了网络编程,会深入了解socket的含义以及用编程的方式实现计算机之间的通信
socket在计算机术语上套接字的意思,事实上我们去翻译软件上查看,可以查出是插座的意思,顾名思义,我们从电厂获取电,是需要插头插上插座获取,而网络传输是将互联网插上socket进行数据传输。
事实上,目前绝多数的应用都会用到socket,浏览网页,看视频,聊天等等。


unix/linux下的socket

unix/linux本质上对文件的操作,所以为了区分各种文件,每个文件会有一个文件描述符。所以unix/linux下的socket也是一个文件,只要获取到socket的文件描述符,就和对普通文件的读操作和写操作没什么差别了。所以在unix/linux下,只要创建了socket连接,接下来就是文件操作。


windows下的socket

在windows下的socket就不是文件了,windows会将socket作为网络连接,所以会有专门的方法去执行socket

套接字的类型

套接字从大类上来说有很多的类型,其中最常见的就是internet的套接字,然后根据传输方式,分为两种

一种是流模式的socket,一种是数据报模式的socket

这里结合tcp和udp会更好理解

流模式的socket

Stream Sockets:面向连接的套接字(SOCK_STREAM)
特点:

  • 数据传输的正确性
  • 数据传输的有序性
  • 数据的发送与接收的不同步
    流模式的socket是基于TCP协议的,所以可以保证数据的有序且无误。
    举两个站长的例子,可以把流模式比喻成传送带,只要传送带本身没有问题,也就是网络没有问题,传送带就不会丢失物品且有序传输。
    假设传送带传输的是需要打包的物品,满100个打包一个,每次传输不需要到一个装一个,等满100后在打包,这就是接收与发送不同步的理解。在流套接字中有一个缓存,每次传输的数据可以先存到缓存中,缓存中的数据既可以分片读取,也可以装满后读取,所以传输和接收是不同步的。
    应用:http协议就是基于流套接字,如果有一个出错,就会导致页面无法加载。

数据报模式的socket

Datagram Sockets:面向无连接的套接字(SOCK_DGRAM)
特点:

  • 传输速率快而无序
  • 数据可能丢失
  • 传输大小有限制
  • 传输与接收同步
    因为不需要对数据的准确性进行校验,所以传输速率会快很多。
    我们把数据报模式的socket比喻成快递小哥,在送快递的过程中不需要考虑顺序且速度要快,但是快递一直以来存在一定的分险,可能你的快递正在燃烧哦,所以会存在丢失损毁的可能,而且每次快递车的容量有限,交付客户是一对一准时接收,所以接收与发送的同步的。
    数据报模式的socket是基于udp的,所以是一种不可靠的socket
    应用:当我们在视频聊天的时候,我们要保证数据传输的速率,少量的丢包并不会影响通话的质量,所以使用数据报模式的socket。

面向连接和面向无连接套接字应用上的区别

学习,了解,应用socket
这里我们假设一个互联网的连接图,其中H1~H6是计算机,A~E代表路由器

  • 从H1->H6传送数据时,无连接的套接字在发送数据的时候,会将多个数据随机发送,每条路径都可能走一次,如果中途出现问题,那么就会出现丢包,所以无连接的套接字无法保证数据传输的质量。
  • 同样的,在H1->H6传输数据,面向连接的会先确定一条路径,在传输数据的时候就按照这条路径来传,假设H1发送数据,H6没有回应,那么H1会在发送一次,保证传输的质量。但是这样的对资源的损耗也是很大的,传输速度自然就会慢。

osi七层网络模型

概述

这里这是对七层模型的简单概述
从下至上:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
功能:对数据进行封装
我们使用软件的时候,是通过应用层来访问,程序产生的数据 通过一层一层的包装,等到达互联网的时候,就会得到一个封装 的数据。
当接收数据的时候,我们会一层一层的拆开包装,最后得到应用的数据。
所以说,包装数据的时候,是从应用层到物理层,拆分数据的时候是从物理层到应用层。
通信原则:

  • 同一层数据进行通信,比如应用层和传输层就不可以。
  • 必须是相同的网络模型
  • 数据只能逐层传输,不能越层。

协议

在每一层中都有很多的协议,协议的作用是就是通信双方必须遵守的协议,例如在传输层有tcp,udp,网络层有ip,大大小小的协议有几百种,规范了计算机网络。
开放式的系统将各个厂商的路由器,网卡等硬件设备统一起来,通信过程中就不需要去使用相同的硬件了,也是一种标准化。

ip,mac,端口

ip地址

一台计算机拥有一个ip地址,通信的时候通过ip地址找到目标计算机

mac地址

不只是一个计算机拥有一个ip地址,一个局域网也可以拥有一个ip地址,但是局域网内有多台电脑,如何定位到其中的一台的计算机,就需要mac地址,每一个网卡的mac地址是独一无二的,mac地址也称物理地址,因为mac地址在出厂的时候就写死在里面了。

端口号

有了ip地址和mac地址,我们可以找到哪一台计算机,但是还需要找到对应的网络服务,才能进行通信,有了ip和mac,可以给计算机发送数据包,但是数据包交给谁处理,却不知道,所以通信还是失败的。为此,计算机为每一个网络服务提供端口号,这样就可以找到对应的网络服务。端口号是逻辑上的,是由计算机分配的。

tcp的三次握手

socketA:我要传数据了
socketB:好的,我知道了
scoketA:行,我知道你确定接收了
下图是数据包的结构:
学习,了解,应用socket

  • 序号seq:用来标记发送数据包的序号
  • 确认号ack:ack=seq+1
  • 标志位:
    • URG:紧急指针(urgent pointer)有效
    • ACK:确认序号有效
    • PSH:接收方应该尽快将这个报文交给应用层
    • RST:重置连接
    • SYN:建立一个新连接
    • FIN:断开一个连接
      建立连接后相互发三个包
      学习,了解,应用socket
      ack还与字节数有关,所以Ack号 = Seq号 + 传递的字节数 + 1,防止丢包
      学习,了解,应用socket

tcp的四次挥手

socketA:我要断开连接了
socketB:好的,稍等一下
socketB:可以断开了
socketA:好的我知道了
学习,了解,应用socket

四次挥手是为了保证所有的数据都传输完毕之后在关闭连接

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-11
  • 2022-01-05
  • 2021-07-21
  • 2021-12-30
  • 2021-11-26
  • 2021-05-25
猜你喜欢
  • 2021-09-08
  • 2021-11-23
  • 2021-06-02
  • 2022-02-09
  • 2021-08-11
  • 2021-11-29
相关资源
相似解决方案