远在两边(在同一台机器也是可以)的两个程序(process)互相传递讯息就是inter-process communication (简称IPC)
**先开口是client端
如果能够给他们一个读写的通道可以更快速就好了,
这时出现Socket[插槽](provided by the OS) ,像是一个门,我们会在第七层与第四层之间对它做读写,过程也是像上一篇说的,一层一层封装往下丢,到目的地再拆封往上丢上来。如图,Socket位置就是图中黄色部分
Server端先初始化Socket,然绑定(bind) port,并监听(listen)port,调用accept阻塞,等待client端连接。这时client也初始化Socket并连接server端,如果成功,这时Server与Client便建立了连线。然後Client发送request,Server端接收并处理request,把Client请求的东西发送给Client端,Client端收到,最后Close 连接,一次的交互即结束。
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 号码,便可以直接通讯,而不用考虑到底是经过何种网路、或主机放在什麽地方。
就会像这样:
简单来说,Socket就是一种作业系统提供的程序间通讯机制。
参见:Socket原理讲解
第八章 TCP Socket 程序介面
之前听过一个比喻,通讯埠像是邮局的柜台,特定号码的窗口有特定功能,例如几号柜台是处理邮务,几号是有关金融事务。port number 很像上述概念。
刚刚说有六万多个port number
0~1023 号的服务已被特别定义
1024~49151有的也被占用
49152~65535目前没有port被正式注册占用,你写程序可以用这里
EX:
HTTP:80
mail server:25
按此查询port number服务:port number维基百科
Types of messages exchanged:
分两类,一个是request,另一个是response
message syntax(语法):
呈现的规格,多少个fields?中间怎麽分隔?长度是可变的吗?
message semantics(语意):
通常的设计是 type, length, message
EX:integer,4Byte,一串数字
rules:
收到怎样的message时,server怎麽反应,除了定义正常时回覆,也定义不正常时的回覆(error handling)。
open protocols:
RFCs定义,HTTP protocols 在browser里面
EX:HTTP,SMTP,NTP
/*也有私人的protocols
EX:Skype/
这里会视application的功能看看有没有特别要求
integrity(资料完整性):
与data loss有关,有的需要完全一模一样。
EX:图片很需要资料完整性
但是即时语音就还好,偶尔掉一个封包也没差(人耳朵对於0.1s的延迟觉得不明显)
timing(即时性):
愈快愈好
EX:即时语音通话,枪战游戏
throughput(单位时间处理量)
没有资料丢失的状态下设备能接收的最大速率
与流畅与否有关
/**我自己解读timing 与 throughput 的差别是 一个是传的速率,另一个是收到的速率(适合评估品质)*/
不同服务所要求的点:
/**best-effort delivery 尽可能做到最好!*/(我们也是喔!!)
在传输层,UDP 和 TCP 都是常见的网路通讯协定,都是透过『IP位址』与『TCP Port』形成一个『Socket』进行通讯。但他们俩个运作行为不同。
TCP是一个完整的协定,也就是会经过『建立連线』、『资料传输』与最後的『关闭連线』三个阶段,属於reliable transport ,正确性导向与连线导向线(Connection Oriented)。
运作如下:
TCP会为每个封包分配唯一识别码与序号,可以保证接收端识别封包完整性与顺序,接收端收到,如果确认正确会发送
确认信号(Acknowledgement),然後发送端继续传。
如果错误接收端就不发送Acknowledgement,因此逾时後发送端重新传,这也是同步传输的表现(双向资料传输协定,会等待对方确认是否已正确收到)。
就是因为如此运作,所以TCP顾及:
1.flow control(流量控制)
2.congestion control(阻塞控制)
3.检查错误
缺点是因为要不断确认,速度会比UDP慢一些。
TCP也不管:
1)timing
2)throughput 最小保证
3)security
基本上TCP不管的,UDP也不会管。属於unreliable data transfer 不可靠传输。
UDP不做错误检查与修正,不会flow control,也不会congestion control。错了就直接丢弃封包,不会给你重传,也因为如此,即时性比较高,属於非连线型(Connectionless)。
**早期需要即时性的功能,UDP占优势,现在网路愈来愈快,router变强,loss变少,这些即时性的功能使用TCP来传也很好。
参见:
维基百科 传输控制协定
TCP 和 UDP 是什麽:简单的说明
维基百科 UDP
<<: [29] 用 python 刷 Leetcode: 404
今天我们来针对API call来进行模拟,因为测试画面不一定都只是点选之类的模拟测试,这时候我们可能...
昨日提到的一些工具都安装好之後,开发的过程中如果要增加开发效率的话还是需要一些套件的辅助,今日的文章...
在 Ruby 里的实体变数是有一个 @ 开头的变数,顾名思义,是活在每个实体里的变数,而且每个实体之...
上一篇处理完页面的样式後,这一篇要来处理资料与逻辑,并且如何透过angular fire 将资料送到...
建立资料中心後,更改登入功能 再登入後将用户资料记录在案 变更 dataCenter 对应的 act...