TCP协议可以说已经是IT人耳熟能详的协议,最近在学习socket网络编程时后重新温习一下这个协议,针对一些问题做了一些总结,很多理解可能还不是很准确。

1. 协议是什么?所谓的各种网络协议无非是一种通信标准,就好象两个人要说话,那么我们首先得规定一种语言,是中文还是英文,这样大家才能在接下来的交流中进行顺利的沟通。至于标准的实现是和代码操作系统无关的,具体从逻辑上怎么实现这个协议就是自己操作了,只要遵守协议标准,大家就能顺利的进行通信/交流。

2. 为什么会有协议分层?OSI有七层协议(实际通用操作系统用的五层系统),电信通信网络协议也有多层。以前读书时候总是去背。其实这种问题可以反过来想,如果只有一层,会怎么样,或者我们自己去设计,应该设计几层?首先假设协议不分层,大家可以想象把几层合并在一起会怎么样,那我们可能只是做一个简单的应用层程序,那可能会完成大量的接口通信工作,还得自己去写或者调用路由层,传输层方法,甚至更多。由于有了分层的概念,那么我们每一层有自己相对独立的功能,例如寻找IP地址就交给IP层去完成了。这样大大提高了大家工作效率,每一层开发人员除了关注自己本身功能的开发,只用去关心接口问题了。就好象操作系统同样有分层,驱动,操作系统,应用层。

3.为什么有传输层?同样的逆向方法,如果没有TCP/IP层,应用层程序怎么进行网络通信?我们能够通过IP找到目标,但是却没有办法确定要和那个应用程序通信,或者说没有办法确定和那个进程/线程通信。通过IP+port的方式可以方便的确定要通信的进程。

4. 如何理解协议不同字段对应功能?通过一个wireshark工具的截图我们可以很清楚的看到一个协议其实就是一段编码,至于不同字段功能可以理解在协议设计时候根据设计需求对字段进行分段,并且有严格标准。例如第一个字段(由于是16进制编码,实际是2 bytes)是source port(源端口),他的值是22(十六进制也就是16),也是通用的端口。我们在应用程序编程时候会避开这些通用端口。通过这个我们也可以算出port的范围应该是0~65535(2^16-1)。后表面的一串便面含义我们这可以去查阅相关的协议。

5.什么是TCP中的面向连接?通信中的所谓建立的面向连接,不是真的能建立起一个通道,然后再进行数据传输。对于下层的消息协议来说,都是分段打的包。无非是短时间内两个进程需要在网络上进行高速有效的通信,理解为面向连接的通信。如何才能保证高效有效的通信,除了光知道IP地址肯定不行,还需要一系列的机制来保证这个通信。为了知道对方更多的信息以及双方约定一些通信规则,于是在正式传送前肯定需要一个通信,双方约定一些通信规则,这个通信过程可以理解成连接的建立。通信活动结束后,不能让进程还占着资源啊,所以还的释放,这个可以理解成连接的释放或者断开。

6. 什么是socket 编程?因为底层和传输层通常已经封装在驱动程序和操作系统里面了,我们再上层应用程序编程编程时候不必再去重写像TCP/UDP这一类传输层的东西,当然也可以去修改。上层应用程序只需要调用一些方法就可以完成网络通信,在Unix一类的由c语言构成的操作系统来说,一般封装在socket的方法里。在这个基础上进行的网络编程称为套接字编程。

关于网络协议和socket编程基本概念的更多相关文章

  1. C语言小项目-基于TCP协议和SOCKET编程的网络通信系统

    1.1 功能结构图   网络通信系统一共由4个模块组成,分别是点对点客户端.点对点服务端.服务器中转服务端.服务器中转客户端.这4个模块是成对使用的,点对点客户端和点对点服务端一起使用,服务器中转服务 ...

  2. 四层协议和Socket编程

    <四层协议图> <Soclet编程模型图>

  3. TCP协议和socket API 学习笔记

    本文转载至 http://blog.chinaunix.net/uid-16979052-id-3350958.html 分类:  原文地址:TCP协议和socket API 学习笔记 作者:gilb ...

  4. 网络协议 11 - Socket 编程(下):眼见为实耳听为虚

    系列文章传送门: 网络协议 1 - 概述 网络协议 2 - IP 是怎么来,又是怎么没的? 网络协议 3 - 从物理层到 MAC 层 网络协议 4 - 交换机与 VLAN:办公室太复杂,我要回学校 网 ...

  5. Http TCP/IP协议和socket之间的区别和联系

    总结,TCP/IP是传输层协议,主要解决数据如何在网路中传输,socket是TCP/IP协议的具体实现,是对TCP/IP协议的封装和应用,属于程序员层面,HTTP是应用层协议,应用层协议很多,类似的像 ...

  6. TCP/IP协议和socket

    1.传输层基于tcp协议的三次握手和四次挥手? 传输层有两种数据传输协议,分别为TCP协议和UDP协议,其中TCP协议为可靠传输,数据包没有长度设置,理论可以无限长,而UDP协议为不可靠传输,报头一共 ...

  7. java网络编程之Socket编程

    概念 网络编程分为BIO(传统IO).NIO.AIO.Socket编程属于BIO这种传统IO. InetAddress java.net.InetAddress是JAVA中管理IP地址的类,常用 pu ...

  8. linux网络编程之socket编程(一)

    今天开始,继续来学习linux编程,这次主要是研究下linux下的网络编程,而网络编程中最基本的需从socket编程开始,下面正式开始学习: 什么是socket: 在学习套接口之前,先要回顾一下Tcp ...

  9. 网络协议 10 - Socket 编程(上):实践是检验真理的唯一标准

    系列文章传送门: 网络协议 1 - 概述 网络协议 2 - IP 是怎么来,又是怎么没的? 网络协议 3 - 从物理层到 MAC 层 网络协议 4 - 交换机与 VLAN:办公室太复杂,我要回学校 网 ...

随机推荐

  1. java的GUI编程

    目前有三种创建模版产生应用窗体: 第一种: public class MenuDemo implements ActionListener{ //你的组件(成员变量) public MenuDemo( ...

  2. python操作redis-过期时间

    #!/usr/bin/python #!coding:utf-8 import time import redis if __name__ == "__main__": try: ...

  3. JS 输出对象的属性以及方法[转载]

    <script>var obj  = {attribute:1,method:function() {alert("我是函数");}}for (var i in obj ...

  4. mongodb操作记录

    [User]1.db.addUser("name","pwd","true/false")2.db.auth("name" ...

  5. 找不到eth0,但能找到eth1的问题解决办法

    故障现象:Linux的网卡由eth0变成了eth1,如何修复?解决方案:在linux中,udev记录网络规则的脚本为:/etc/udev/rules.d/70-persistent-net.rules ...

  6. Struts2+Spring集成合并

    前边单独总结了Struts2,Spring和Ibaits框架了,那么怎么结合使用呢?这次先来看一下Sturts2和Spring的集成合并.其实挺简单的,就是导入各自的jar包以及连接彼此的jar包,分 ...

  7. 使用lock_sga和pre_page_sga参数保证SGA常驻物理内存 .

    Lock_sga LOCK_SGA locks the entire SGA into physical memory. It is usually advisable to lock the SGA ...

  8. 【CCTYPE函数系列】

    #include <cctype>的函数 c++中应该是#include <cctype> c中应该是#include <ctype.h> 以下为字符函数库中常用的 ...

  9. 三、Mp3帧分析(数据帧)

    一. 帧 帧头长4字节,是的,是4个字节,共32位. 帧头后面可能有两个字节的CRC 校验,这两个字节的是否存在决定于FRAMEHEADER 信息的第16bit, 为0 则帧头后面无校验,为1 则有校 ...

  10. EF Code Frist

    EF:学习资料 http://www.cnblogs.com/libingql/category/366833.html