网络传输

      No Comments on 网络传输

依个人浅见写的,以通俗易懂为目的,千万不要认为这个写的都对,需要确认时请翻阅权威资料。

TCP/IP是啥

TCP、IP是现在五层网络模型中的两个协议,五层网络模型中还有很多其它协议,比如UDP、ARP、RTP等。

这两个总是被单拧出来我觉得主要原因是:
1. IP这个东西我们整天接触,甚至经常会说:你的IP多少我请求下你的服务。
2. TCP决定了你怎么理解网络请求的可靠性和传输可能发生的一些细节,如果对这个有点概念对平时工作中涉及网络的时候会有一点底。

下面我说一下我对IP的理解:
每一个网卡有一个物理意义上的唯一地址,这个地址是机器生产出来之后直接被规定好的,叫做mac地址。通过mac地址我们完全可以区分不同的设备。IP则建立在mac地址固定的前提上,相对的,IP更加灵活。你的机器可以动态的通过路由器提供的服务获得自己的IP,这个时候路由器是遵守另一个协议来动态分配IP的。那是另一件事。

IP又分为公网IP和局域网IP。先说局域网IP,我们有时候看自己机器的IP都是192.168..或者10...***。这样形式的IP就是局域网IP。当我们发起目的IP地址是这样的请求的时候,路由器会将请求发到局域网中的某台机器上去。这些局域网IP的只能局域网中互相访问。在局域网之外就没法访问了。

比如如果你访问google.com 你本质上访问的就是一个或者多个公网IP。你在任何能接入互联网的地方都能访问(某些地方例外)。你输入google.com却访问的是一个数字形式的IP地址,这其中就是域名解析(DNS)在起作用了。这些都是老生常谈。

对了,额外提一下,路由器在你不注意的时候其实帮你做了很多事:通过UDP、路由表等给你机器分配IP,处理你发出的请求,将收到的回复发给你、维护一个高效的网络路径。it’s a long story。

那TCP呢:
我们除了能访问网络之外,我们分外关心的是网络传输对数据完整性和可靠性的保证是怎样的。TCP就是这样一个协议。帮助我们尽量完整的交付我们的数据。TCP会在请求开始前进行三次握手保证网络两端都准备好进行接下来的网络传输。但是数据都是一个个小的数据包持续不断的传过去的。TCP协议负责对这些数据包进行排序发送,并检查哪个序号的数据包没发送成功,将没法送成功的数据包再发出去。实在不行(比如请求超时或多次发送失败)接收方会返回数据发送失败的报告。如果发送成功接收方会根据TCP协议的规定,将按序号将数据包排列好。形成完整数据。给发送方发送成功接收的报告,请求顺利完成。

可能有人疑问假设所有数据包都发送过去了,但是有的数据包的数据被篡改或损坏怎么办?岂不是接到了错误的数据?答案是应该不会。因为最后接收方会将整个进行一次求和验证。这个应该能够保证数据不被篡改。但是也不能说死,想要彻底不被篡改就应该试试不对称加密。

shadowsocks

shadowsocks真的非常赞。我看了一点原来shadowsock-iOS的源码,如同C大在issue中所说这个工程已经废弃。我弄了半天虽然跑起来了,但是不再起作用,我试图fix。但是能力有限没有成功。

后来看到了tuoxie007老师一个shadowsocks buildin的项目。学到了不少东西。对理解shadowsock有帮助。我将代码注释了一下放在这里有兴趣的人可以clone一下看看。

Leave a Reply

Your email address will not be published. Required fields are marked *