网络编程:每个程序都在其电脑网卡上登记了一个端口。 网络编程就是面向端口的。
一个连接是由她两端的套接字地址唯一确定的。这对套接字地址叫做套接字对(socket pair)。由客户端ip、端口,服务端ip、端口,唯一确定。
以太网网络下,传输的都是以太网数据包,结构为:
是层层包含:以太网数据包包含ip数据包,
或者说层层依赖基于的关系:http协议数据包,(大概)是基于udp协议数据包的。
每个数据包分为:标头、数据,两部分。
什么是连接?
两个套接字之间,是像早期电话线一样,需要接线员接通独享线路吗?
还是共享线路,并且由一个服务程序+硬件控制,引导数据包的去向?
我的猜想:是后一种。
1、互联网上联网的主机众多,通信数据庞大,套接字之间独享线路可能很困难。
2、说基于tcp协议的包的发送,首先需要建立连接。这个连接,不过是大概三次互发数据包,来确定连接已建立。
而udp包只管发包,没有tcp这个过程。
可以这样说,只要套接字之间成功实现了数据包的传递,哪怕是单向的,我们都可以说,连接建立了。
3、程序在网卡上都有端口,只要网卡(大概是cpu通知网卡监听)开始监听这个端口,端口上一有数据,网卡就会接收、处理。
一台电脑的主机,主需要关心监听自己套接字的端口就可以了。至于数据包是怎么找对方的?怎么认识路?
主机根本不关心(很大的可能是,计算机网络的原理就是主机对这些不作为。而是由另设的服务器来处理。)。
两个套接字所在的主机,做的事情就是 1、建立套接字 2、发包,收包。3、关闭套接字,停止发送、接收包。
4、互联网上的主机,本来就互相连接着(连接本来就建立了)。
套接字,所做的只是给数据包一个地址:哪个主机ip、哪个程序端口?
5、怎么理解连接? 连接是应用层(应用软件)的概念。用于描述两个套接字之间是否可以通信而已(这个定义很经典)。
而一旦可以通信了,只有两种情况会断开连接(不能通信)。1、程序代码操作,正常关闭。2、程序出现异常关闭。
而关闭的就是套接字,端口被关闭(或者取消)了,或者不再监听这个端口了。