tcp/ip协议学习笔记一

时间:2022-05-20 10:26:07

一、 简述

以前在学校学习计算机网络的时候学习多是网络7层模型OSI,了解了一些基本的计算机网络概念和协议通信格式,但是一直没弄明白其中的原理,包括各层之间的关系,应用,还有一些常见的令牌环网到底是什么东西,这个OSI它和 TCP/IP协议簇到底是什么关系,为什么有很多协议一样?ip指令格式是什么样的?为什么老是忘记,记不住?3次握手,4次握手协议是什么?ack,syn等等说不清道不明字段是指什么?为什么以太网网卡通信速率有100mbps,两台主机之间的通信却只有不到120kpbs?。。。所有的这些疑云,不得不让自己再次拿起书翻阅《tcp/ip详解 协议》学习tcp/ip为什么能替代osi占领互联网,不过这次得学乖一点,得做笔记了,让自己理解更加深刻具体,同时作为自己的记录以后可以随意翻阅。

 

二、tcp/ip协议分层

2.1分层结构

应用层 Telnet, FTP, SNMP, STMP, DNS, HTTP
传输层  TCP , UDP
网络层 IP, ICMP, IGMP
链路层 设备驱动程序, 网络接口卡

 

应用层: 处理特定应用程序细节。

传输层:也叫运输层,为两台主机提供端到端的通信。

网络层:处理分组在网络中的活动。

链路层:也叫数据链路层,包括os中设备驱动程序和计算机网络接口卡,处理电缆等传输媒介的物理接口细节。

 

2.2一个局域网(Local area net -- LAN)两台主机进行ftp协议通信示例

 

tcp/ip协议学习笔记一

 

注:1.一层只关心层内的通信细节,对其他层的细节则不关心;

2.同一层可以和同一层之间相互通信,对其他层则一无所知;

3.下一层为上一层提供服务,但是不必了解其细节。

 

2.3层次协议关系

tcp/ip协议学习笔记一

 

2.4网络层和应用层区别

两层都是处理通信细节,为什么要分两层而不合为一层?

计算机需要处在复杂的网络环境当中,而不是只有几台主机的简单网络当中,而复杂网络环境中各网络中转设备(硬件盒,也叫IP路由器,IP Router)、传输协议、通信的主机操作系统都有可能有很大差异,再加上主机还要处理和具体应用相关细节,如果全部放到一层来处理,势必会增加网络协议复杂性,以及给开发ip路由器带来难度,而让网络传输的路由器实现某些特定应用程序的服务,也没用必要。所以分为两次是势必的。

 

2.5名词释义

IP路由器: IP router,Router,网络层上互连网络。

网关:Router以前也叫网关(gateway),现在网关仅表示应用层网关:连接两种不同协议的进程,如tcp/ip和ibm的sna。

:也叫端系统(End System)网络通信中的两台主机。

中间系统:Intermediate system , 端与端之间的路由器。

多接口:一个路由器具有2个或者多个网络接口层,连接了2个或多个网络,称为多接口的;一个主机一般不称作路由器,因为它的功能不是只单纯把分组从一个接口送到另外一个接口,但是在特殊情况下是可以称作Router的,Router是针对一定的功能角色来说的,而不是对特定硬件设备。

网桥:链路层上互连网络,使多个LAN组合在一起。

DNS:存储 [IP地址<->主机名] 映射关系的 分布式数据库, 由InterNIC管理。

 

ip协议提供不可靠服务,尽可能快地把分组从源结点送到目的结点,tcp基于ip协议,但是tcp提供可靠服务,tcp为什么能做到可靠服务?

tcp采用了超时重发、发送接收端到端的确认分组等机制。

 

2.6 IP地址

 

2.7 数据报文封装

 

2.8 C/S模式

 

2.9端口号

TCP, UDP采用16bit端口号识别应用程序:0<=端口号<=65535。

端口号分配见下表:

 

端口号 占用服务/进程 备注
1~255 知名端口号 IANA管理
256~1023 Unix/Linux/Mac OS系统占用 IANA管理
1024~5000 临时端口分配 用户/开发人员自管理
>5000 为其他服务器预留 Internet不常用服务
知名端口号    
21 FTP的TCP端口  
23 Telnet的TCP端口  
69 TFTP的UDP端口  
     

 

大多数Unix系统的文件/etc/services都包含所熟知端口号

如查看Telnet服务器和域名系统的端口号系统命令:

grep telnet /etc/services

telnet 23/tcp 表示它使用TCP的23号端口

% grep domain /etc/services

domain 53/udp

domain 53/tcp

 

2.10 编程实现