企业资料通讯Week4 (1) | Socket &TCP & UDP

Socket 是甚麽?

远在两边(在同一台机器也是可以)的两个程序(process)互相传递讯息就是inter-process communication (简称IPC)
**先开口是client端
如果能够给他们一个读写的通道可以更快速就好了,
这时出现Socket[插槽](provided by the OS) ,像是一个门,我们会在第七层与第四层之间对它做读写,过程也是像上一篇说的,一层一层封装往下丢,到目的地再拆封往上丢上来。如图,Socket位置就是图中黄色部分
https://ithelp.ithome.com.tw/upload/images/20211013/20135414bRaReJkVjI.png

Socket 流程

Server端先初始化Socket,然绑定(bind) port,并监听(listen)port,调用accept阻塞,等待client端连接。这时client也初始化Socket并连接server端,如果成功,这时Server与Client便建立了连线。然後Client发送request,Server端接收并处理request,把Client请求的东西发送给Client端,Client端收到,最后Close 连接,一次的交互即结束。

建立 Socket

Socket如其名,[插槽]功能的确像电话『插座』一样。如以电话系统而言,只要将电话的插座设定好某一号码,任何一部电话都可透过这个插座和其它电话通讯。要建立Socket你要有
(1)IP(2^32种不同IP)
(2)port number(2^16,一台机器约可以给65536个独特processes)

IP好懂就是就是你要传的地址,
而为甚麽要有 port number 呢?
想想,一台机器假设有几百个process,我们要让特定的Socket绑定特定的process,因此每个Socket 都给予一个特殊号码(IP number + TCP port),使用者之间只要记住对方的 Socket 号码,便可以直接通讯,而不用考虑到底是经过何种网路、或主机放在什麽地方。
就会像这样:
https://ithelp.ithome.com.tw/upload/images/20211013/20135414nkXVcXerRm.png

简单来说,Socket就是一种作业系统提供的程序间通讯机制。

参见:Socket原理讲解
第八章 TCP Socket 程序介面

常见的port number

之前听过一个比喻,通讯埠像是邮局的柜台,特定号码的窗口有特定功能,例如几号柜台是处理邮务,几号是有关金融事务。port number 很像上述概念。
刚刚说有六万多个port number
0~1023 号的服务已被特别定义
1024~49151有的也被占用
49152~65535目前没有port被正式注册占用,你写程序可以用这里
EX:
HTTP:80
mail server:25

按此查询port number服务:port number维基百科

App-layer protocol 设计

  1. Types of messages exchanged:
    分两类,一个是request,另一个是response

  2. message syntax(语法):
    呈现的规格,多少个fields?中间怎麽分隔?长度是可变的吗?

  3. message semantics(语意):
    通常的设计是 type, length, message
    EX:integer,4Byte,一串数字

  4. rules:
    收到怎样的message时,server怎麽反应,除了定义正常时回覆,也定义不正常时的回覆(error handling)。

  5. open protocols:
    RFCs定义,HTTP protocols 在browser里面
    EX:HTTP,SMTP,NTP

/*也有私人的protocols
EX:Skype
/

讲一下app需要甚麽transport服务

这里会视application的功能看看有没有特别要求

  1. integrity(资料完整性):
    与data loss有关,有的需要完全一模一样。
    EX:图片很需要资料完整性
    但是即时语音就还好,偶尔掉一个封包也没差(人耳朵对於0.1s的延迟觉得不明显)

  2. timing(即时性):
    愈快愈好
    EX:即时语音通话,枪战游戏

  3. throughput(单位时间处理量)

没有资料丢失的状态下设备能接收的最大速率
与流畅与否有关

  1. security(安全性)
    加解密

/**我自己解读timing 与 throughput 的差别是 一个是传的速率,另一个是收到的速率(适合评估品质)*/

不同服务所要求的点:
https://ithelp.ithome.com.tw/upload/images/20211013/20135414fCoCTRrd5E.png
/**best-effort delivery 尽可能做到最好!*/(我们也是喔!!)

TCP & UDP

在传输层,UDP 和 TCP 都是常见的网路通讯协定,都是透过『IP位址』与『TCP Port』形成一个『Socket』进行通讯。但他们俩个运作行为不同。

TCP(Transmission Control Protocol)

TCP是一个完整的协定,也就是会经过『建立連线』、『资料传输』与最後的『关闭連线』三个阶段,属於reliable transport ,正确性导向与连线导向线(Connection Oriented)。

运作如下:
TCP会为每个封包分配唯一识别码与序号,可以保证接收端识别封包完整性与顺序,接收端收到,如果确认正确会发送
确认信号(Acknowledgement),然後发送端继续传。
如果错误接收端就不发送Acknowledgement,因此逾时後发送端重新传,这也是同步传输的表现(双向资料传输协定,会等待对方确认是否已正确收到)。

就是因为如此运作,所以TCP顾及:
1.flow control(流量控制)
2.congestion control(阻塞控制)
3.检查错误

缺点是因为要不断确认,速度会比UDP慢一些。

TCP也不管:
1)timing
2)throughput 最小保证
3)security

UDP(User Datagram Protocol)

基本上TCP不管的,UDP也不会管。属於unreliable data transfer 不可靠传输。
UDP不做错误检查与修正,不会flow control,也不会congestion control。错了就直接丢弃封包,不会给你重传,也因为如此,即时性比较高,属於非连线型(Connectionless)。

**早期需要即时性的功能,UDP占优势,现在网路愈来愈快,router变强,loss变少,这些即时性的功能使用TCP来传也很好。

参见:
维基百科 传输控制协定
TCP 和 UDP 是什麽:简单的说明
维基百科 UDP


<<:  [29] 用 python 刷 Leetcode: 404

>>:  如果你对Microsoft 认证感兴趣

Day 24 cypress取得mock的回传资料

今天我们来针对API call来进行模拟,因为测试画面不一定都只是点选之类的模拟测试,这时候我们可能...

Day5 - 新鲜人提升开发效率的方法(扩充套件篇)

昨日提到的一些工具都安装好之後,开发的过程中如果要增加开发效率的话还是需要一些套件的辅助,今日的文章...

Ruby 实体变数(instance variable)

在 Ruby 里的实体变数是有一个 @ 开头的变数,顾名思义,是活在每个实体里的变数,而且每个实体之...

DAY17-前後端合体 建立打卡页面-前端服务篇1

上一篇处理完页面的样式後,这一篇要来处理资料与逻辑,并且如何透过angular fire 将资料送到...

[18] 登入後将用户资料纪录

建立资料中心後,更改登入功能 再登入後将用户资料记录在案 变更 dataCenter 对应的 act...