TCP + UDP
这两个的什么关系就不说了。
传输层协议和应用层协议的关系:
http = TCP + 80
https = TCP + 443
RDP = TCP + 3389
ftp = TCP + 21
共享文件夹 = TCP + 445
SMTP = TCP + 25
POP3 = TCP + 110
telnet = TCP + 23
SQL = TCP + 1433
DNS = UDP + 53
服务和应用层协议之间的关系:
服务使用TCP或UDP的端口侦听客户端请求
客户端使用IP地址定位服务器,使用目标端口定位服务
可以在服务器网卡上设置只开放必要的端口 实现服务器网络安全
如何查看服务侦听的端口
netstat -an
netstat -n 查看建立的会话
netstat -nb 查看建立会话的进程
telnet 192.168.12.1 3389 测试到远程计算机的某个端口是否打开
TCP报文首部格式:
可以看到TCP内容挺多的。其中首部有20字节的固定首部,还有选项和填充。
1,源端口和目标端口就不说了:每个端口占16为。
2,序号(sequence number)占16位,我们应该明白数据在传输层传输过程中,数据并不是全部打包出去的,因为通常来说数据包都是比较大的,所以我们一般需要分段(类似于网络层中的分片),而序号就是表示每个段的开始的那个字节的大小。比如有一段数据包的字节是从5到10的,即5个字节,那么序号则应该是5。
3,确认号:假如计算机在收到了1到4的数据包后,他要给源主机发送一个确认信息,然后这个确认号表示源主机可以从第5个数据包开始发送了,因为前四个已经接收到了。
4,数据偏移:用来记录数据多少个字节之后开始有数据了。我们知道上面除了20个字节固定首部,还有选项和填充。占4位。
5,URG:假如我们在传输过程中,突然不想传了,这时候需要发送一个数据包告诉对面的主机,但是缓存里面已经有其他数据了,要等到他发送还需要一些时间,这时候我们可以设置URG = 1,表示他不用排队,马上就发送过去就可以了。
6,ACK:ack = 0,表示确认号无效,如果是1的话确认号有效。例如我们刚开始发送一个数据包主机时,这时候是没有确认号的。
7,SYN:同步的时候要用到的,例如主机要跟web服务器建立链接,那么主机要先把syn设为1,然后web同意,返回一个数据包,syn也是1。只在建立会话的时候才会为1。
8,PUS:pus设为1的话,代表计算机接收到的包要先读取,而不是在缓存里面等待。这个其实是跟URG相反的。
9,RST:如果rst为1,说明tcp会话出现严重错误,必须释放连接。重新建立链接。
10,FIN:fin为1的话,则是表示释放连接,数据已经传完了。
11,窗口:2字节,比如主机和web服务器通信,主机给web先发我这边的缓存最大为65535,那么web服务器那边就会设置发送缓存最大为65535。所以窗口就是为了设置缓存大小的。
12,校验和:这个计算略过。有机会跟网络层的一起说说。
13,紧急指针:2字节。只有在URG为1的时候才起作用。比如紧急指针为50,则表明从1到50的数据是需要紧急处理的数据。
14,选项:可以规定数据包最大长度是多少,如MSS = 1600。
TCP如何实现可靠传输:
1,以字节为单位的滑动窗口技术:
见这个视频
TCP如何实现流量控制:
见这个视频
TCP拥塞控制:
见这个视频