第一篇:TCP通信总结 ZY
Qt 中利用 TCP 实现多个客户端之间相互发送消息系以及服务器的群发信息
思路如下:首先每个客户端与服务器相连是会有一个对应的 Tcpsocket,把这些sockt 全部放入一个 list 容器中,当客户端有数据发送时,读取是哪个 socket 中的消息,读取完后,再把消息发送到 list 中的所有 socket 中,在客户端判断这个消息是不是发送给自己的,如果是,则接受,否则不接受(在读到是哪个 socket 中有数据时,也可直接写入到这个 socket 中),要注意的是对数据进行打包和解包。对数据进行分析,我这个只是一个简单的参考。创建一个存放 socket 的 list 容器:
socket_list= newQList
m_tcpsocket = m_tcpserver->nextPendingConnection();socket_list->append(m_tcpsocket);
connect(m_tcpsocket,SIGNAL(readyRead()), this,SLOT(readMessage()));服务器读取客户端的消息: void Widget::readMessage(){
for(int i = 0;i < socket_list->length();i ++){ array_str = QString(socket_list->at(i)->readAll());if(!(array_str.isEmpty())){ qDebug()<< “break ”;break;} }发送出去
}
void Widget::sendMessage(QString infomation){
for(int i = 0;i < socket_list->length();i ++){ socket_list->at(i)->write(cmd.toUtf8().data());//m_tcpsocket->write(infomation.toUtf8().data());
}
}
实例程序:
pro 文件里要加一句:QT += network
服务器端:
1、声明QTcpServer、QTcpSocket QTcpServer *tcpServer;//监听套接字 QTcpSocket *tcpSocket;//通信套接字
2、定义、实例化
tcpServer = NULL;tcpSocket = NULL;tcpServer = new QTcpServer(this);tcpServer->listen(QHostAddress::Any,8888);//监听所有
connect(tcpServer,SIGNAL(newConnection()),this,SLOT(getSocket()));socket_list = new QList
3、作为服务器通过TCP协议接收数据 void MainWidget::getSocket(){ tcpSocket = tcpServer->nextPendingConnection();//获取已经建立的连接的子套接字
socket_list->append(tcpSocket);//添加到socket_list中
QString ip = tcpSocket->peerAddress().toString();//此处是通过通信的套接字进行获取,也可以获取对方的IPv6和IPv4,但是此处转换为QString型
qint16 port = tcpSocket->peerPort();//直接获取端口,不需要进行转换
QString temp = QString::fromLocal8Bit(“[%1:%2]:成功连接”).arg(ip).arg(port);qDebug()<< temp;//打印ip,port connect(tcpSocket,&QTcpSocket::readyRead, //先取出了tcpSocket之后才能有调取readyRead
[=](){ //这种只能1对1
//从通信套接字中取出内容//array = @i00009装备9请求帮助$
//array = tcpSocket->readAll();//readAll()函数是比较方便的取出tcpSocket中的所有的内容
// array_str = QString(array);
// qDebug()<< QString(array)<< array_str.size();// //array_str = QString::fromLocal8Bit(“@i00009装备9请求帮助$”);//这种能1对多
for(int i = 0;i < socket_list->length();i ++){ array_str = QString(socket_list->at(i)->readAll());//依次 //注意接收和发送的编码要一致 读取
if(!(array_str.isEmpty()))
{ qDebug()<< “break ”;break;} } qDebug()<< array_str;
//解析数据
if(array_str.mid(0,1)== “@” &&
array_str.mid(array_str.size()-1,1)== “$”)//帧头帧尾
{ if(array_str.mid(1,1)== “i”)//功能码
{
ui->information->setText(array_str.mid(7,array_str.size()-8));} if(array_str.mid(1,1)== “j”)//功能码
{
ui->information->setText(array_str.mid(7,array_str.size()-8));} }
//将读到的数据插入到数据库中
QString insert_tcp_text = “insert into message_tcp_receive values(null,?,?,now())”;QSqlQuery sql_insert_tcp_text;sql_insert_tcp_text.prepare(insert_tcp_text);sql_insert_tcp_text.bindValue(0, array_str.mid(0,5));sql_insert_tcp_text.bindValue(0, array_str);sql_insert_tcp_text.exec();
if(array_str.mid(0,1)== “0”)//功能码
{ QString select_data = “select car_id from realtime_data limit 1”;QSqlQuery sql_select_data;sql_select_data.prepare(select_data);sql_select_data.exec();QString
id=QString::number(sql_select_data.value(0).toInt()+1);
QString insert_data = “insert into realtime_data values(null,?,?,?,?,?,0,0,0,0,0,0,0,0,0,0,0,0,now(),now())”;QSqlQuery sql_insert_data;sql_insert_data.prepare(insert_data);sql_insert_data.bindValue(0, id);sql_insert_data.bindValue(1, “401158”);sql_insert_data.bindValue(2, array_str.mid(2,5));sql_insert_data.bindValue(3, “192.168.1.4”);sql_insert_data.bindValue(4, “192.168.1.108”);sql_insert_data.exec();
QString back_id=id.sprintf(“%05d”,id);;writeCmd(“@0”+back_id+“$”);
}
}
4、作为服务器发送数据信息
void MainWidget::writeCmd(QString cmd){ //这种只能1对1
// //qDebug()<< “writeCmd” << cmd;// if(NULL == tcpSocket)// {
// return;
// }//如果最开始没有建立连接,那么tcpSocket就为一个空的值,这时不能进行发送数据的操作
// //发送数据给对方,使用套接字tcpSocket // tcpSocket->write(cmd.toUtf8().data());
//这种能1对多
for(int i = 0;i < socket_list->length();i ++){ socket_list->at(i)->write(cmd.toUtf8().data());//注意接收和发送的编码要一致
//m_tcpsocket->write(infomation.toUtf8().data());
} }
客户器端:
1、声明,定义QTcpSocket QTcpSocket *socket;
2、实例化,建立TCP连接
//TCP连接
socket = new QTcpSocket();connect(socket, SIGNAL(connected()), this, SLOT(OnConnected()));connect(socket, SIGNAL(disconnected()), this, SLOT(OnDisconnected()));connect(socket, SIGNAL(readyRead()), this, SLOT(socket_Read_Data()));int port = 8888;//获取端口号,与服务器端口一致
socket->abort();//取消已有的连接
socket->connectToHost(IP, port);//连接服务器
if(!socket->waitForConnected(1000))//等待连接成功
{ qDebug()<< QString::fromLocal8Bit(“指挥中心连接失败!”));} else
{ qDebug()<< QString::fromLocal8Bit(“指挥中心连接成功!”));}
3、作为客户端通过TCP协议接收数据 //从服务器端获取控制信号
void MainWindow::socket_Read_Data(){ QByteArray signal;//读取缓冲区数据
signal = socket->readAll();QString signaldata;signaldata = QString(signal);}
4、作为客户端发送数据信息
void MainWidget::writeCmd(QString cmd){ //这种只能1对1
//qDebug()<< “writeCmd” << cmd;
if(NULL == tcpSocket){ return;}//如果最开始没有建立连接,那么tcpSocket就为一个空的值,这时不能进行发送数据的操作
//发送数据给对方,使用套接字tcpSocket
tcpSocket->write(cmd.toUtf8().data());
}
第二篇:zy竣工总结
如皋市中央大道(益寿南路~海阳南路)工 程
竣
工
总
结
南通市港闸市政工程有限公司
如皋市中央大道(益寿南路~海阳南路)工程项目经理部
二0一二年十一月
如皋市中央大道(益寿南路~海阳南路)工程
竣工总结
如皋市中央大道(益寿南路~海阳南路)工程是如皋市区路网中的一条主干路,本次施工路段西接益寿南路,东至海阳南路,途经政法路(规划)、大司马南路(在建)、宣化南路(在建)、府西路(规划)等。道路全长2106.27m,标准横断面布置为:4.5m非机动车道+3m绿化分隔带+12m机动车道(公交展宽段3m)+6m中央分隔带+12m机动车道(公交展宽段3m)+3m绿化分隔带+4.5m非机动车道=45m。
工程建设单位是如皋市城建投资有限公司,设计单位是如皋市规划建筑设计院有限公司,试验单位是如皋市永诚建设工程检测有限公司,监理单位是南京明达建设监理有限公司。本段工程由我们南通市港闸市政工程有限公司以约6000万元的报价投资承建。
如皋市中央大道(益寿南路~海阳南路)工程自2011年8月18日正式开工以来,在局领导的重视、关心、支持下,在业主、监理、试验、设计单位的密切配合下,通过我公司的精心组织和全体施工人员的共同努力,于2011年10月28日按合同节点工期要求,完成大司马路至海阳南路段,于2012年10月28日园满地完成本标段所有施工任务,历时438日历天,实际用时377日历天,现值此验收之际对本工程的施工情况作一简要的汇报。
一、工程概况:
如皋市中央大道(益寿南路~海阳南路)工程,主要施工项目有:土方、道路、排水管道、给水管道、强、弱电管沟、箱涵及绿化等工程。
1、道路结构组合如下:
(1)机动车行道路面结构组合(自上而下):
5cm细粒式沥青砼(AC-13C)8cm中粒式沥青砼(AC-20F)1cm沥青下封层 32cm二灰碎石 20cm12%石灰土
结构层总厚度66cm(不含处理层)
车行道土基采用40cm 6%石灰土、20cm 8%石灰土分三层处理。(2)非机动车行道路面结构组合(自上而下)::
4cm细粒式沥青砼(AC-13C)5cm中粒式沥青砼(AC-20F)1cm沥青下封层 20cm二灰碎石 20cm12%石灰土
结构层总厚度50cm(不含处理层)
非机动车道土基采用40cm6%石灰土分两层处理。
完成工程量:沥青砼路面面积80603M2,侧石17342.99M,平石16750.39M,公交站台8个。
2、雨污水管道D400以内采用UPVC管,1:1砂石基础;D400以上采用预应力钢筋砼管,砂石基础,行车道下排水管道采用砼基础及过路管采用钢筋砼基础。
雨水管道总长4767.47M, 雨水连接管总长2211.9M,污水管道总长3644.38M,二、工程组织与施工情况
1、项目部的组建和施工队伍的落实
针对本工程的施工目标和质量要求,公司领导非常重视,组建了高效、精干的项目部,调集了公司内部具有多年市政施工经验、技术和施工水平过硬的施工队伍进场,建立健全各项管理规章制度,职责分明,责任到位。
2、工程施工质量
我们在确定保市优、创省优示范工程的施工目标后,对施工中的每一道工序都以提高一个等级要求来进行检查验收,做到施工中有交底、有巡查、有验收,并严格执行监理程序,对工程实行全方位的质量监控管理,在原材料检验上,安排专人验收,并在现场监理见证下随机取样送检,合格后方可使用。在施工管理上,我们现场技术人员跟班作业,从不擅自离开工地,发现问题及时解决。现工程已全部完成,通过对工程技术资料的自查和监理组核查,资料项目基本完整、齐全,各分项工程均符合优良等级标准。
三、工程质量控制情况
1、进场原材料控制
原材料质量好与差是直接影响工程质量的根源,因此,我们在工程实施过程中,把原材料试验作为本次工程质量控制的重点,并对每一批进场的原材料进行事前检查,然后通知现场监理验收,在符合规范要求后,方可使用于本工程。
2、施工过程控制
为保证工程施工过程质量,我们在工程实施过程中,采用了质量预控防范措施,同时配置了一定数量的试验检测器材。项目部技术组向施工班组长进行各工序技术交底,讲明关键工序的操作方法、注意事项以及质量通病的防治措施。其次是在施工中,加强过程巡视与检查,杜绝违规施工的发生,对在检查中发现的问题及时地予以纠正处理。
在雨污水管道施工阶段,我们现场技术人员重点地对沟槽开挖坡度、基础断面、井管连接部位以及闭水试验等进行跟班检查管理,尤其在管槽回填方面,着重地控制了回填厚度和压实度,并在所有检查井周围50M内采用了石灰土回填。
在进行路基灰土处理时,我们严格执行分格铺灰、计量运料程序,以保证灰剂量的准确。在混合料拌和上,除土基第一处理层采用中型旋耕机旋拌外,其余均采用稳定土拌和机进行拌和。
在施工12%石灰土基层时,除执行分格铺灰、计量运料程序外,安排专人跟踪查验拌和深度和拌和后的均匀度,并及时抽验混合料的灰剂量和含水量,在达到规范要求后,方可进行机械碾压。
在二灰碎石施工阶段,我们安排专人查验料场内的材料质量和混合料含水量,并经常巡查料场后套生产线和电脑控制室。在进行二灰碎石摊铺时,测量人员跟踪检测摊铺面高程、平整度以及横坡度等,对摊铺中出现的异点及时加以处理。现场试验人员及时取料,抽测到场混合料的含石量、灰剂量以及含水量等,对达不到要求的及时通知料场人员调整至标准。
在沥青砼面层施工中,我们首先选择了具有多年沥拌经验且有一定施工能力的如皋路翔公司,其次对沥青砼的原材料进行复试检验,在沥青砼生产过程中,我们重点地检查了沥青混合料的配比和整个操作过程,同时对摊铺于现场的沥青砼及时取样送指定的质量检测中心进行配比验证和车辙试验。在沥青砼摊铺时,我们又重点地检查了沥青混合料的到场温度和所配备的碾压机械数量,并对摊铺后的沥青砼进行钻芯取样,查验沥青砼实际摊铺厚度和压实度,通过抽验结果全部符合设计规范要求。
四、工期控制
本工程计划于2011年7月30日开工,2011年12月30日竣工(大司马路~海阳南路),施工工期为137个日历天,实际开工于2011年8月18日,并于2012年10月28日本标段工程全部施工结束,施工工期为438个日历天。工程开工时因电源迟迟未到位,进入8月后又是长期连续的雨季,错过了宝贵的施工黄金期,待具备施工条件后,我们针对要求的节点时间进行了工程量的周计划倒排,为达到周计划的实效性,项目部除每周召开一次计划安排会议外,每天下班前召集现场管理人员进行短时间的碰头会,了解和检查当天完成情况,对于当天没有能完成的项目及时采取弥补措施。
五、工程施工安全情况
通过近年来市政安全工作的不断深入,广大职工的安全意识有了相当大的提高。为确保本工程无事故发生,项目部成立了以项目经理为组长,专职安全员为副组长,现场管理人员为成员的安全领导小组,严格执行安全技术交底制度,落实安全生产责任人,特殊工种人员必须持证上岗。对路段内的交叉口及各乡村道口均采取了彩钢板围护和红灯警示措施,夜间张挂照明灯具。并定期进行安全检查,发现问题及时解决,从工程开始至结束,本工程未发生任何安全事故。
六、工程总结
如皋市中央大道(益寿南路~海阳南路)工程之所以能在工期紧、质量要求高的情况下顺利完成该工程的施工任务,我们有如下的体会:
1、上级主管领导的重视、各部门的密切配合是本工程如期完成的保证。本工程在计划开工时节,由于电源一直未到位和供电量不能满足施工使用,管道无法进行降水开挖,后在局领导的重视、关心下,业主代表大力协调下,积极与如城供电所联系,使工程在2011年8月18日得以开工。
2、设计技术的指导和监理的把关,使工程质量得到了进一步的保证 在工程实施过程中,当我们遇到施工技术上的难题时,总是设计人员亲临现场指导解决,完善工程细部质量,现场监理更是一丝不苟的旁站、认真负责的把关、使本工程在力赶进度的同时,保证了工程施工质量。
如皋建设局领导每日深入工地检查指导工作,为我们解决了不少的实际问题和困难。监理公司、设计院等在施工过程中采取了全面跟踪服务、指导、监督,为我们解决了大量的技术难题和施工难题。今天,借此验收的机会,我代表南通市港闸市政工程有限公司和中央大道(益寿南路~海阳南路)工程项目部的全体施工人员,衷心感谢各位领导和专家!由于我们的管理水平和施工能力有限,在工程施工过程中还有许多不足之处和不完善的地方,敬请各位领导、专家给予批评指正,我们将认真总结,以便于在今后的工作中不断地完善、提高。
谢谢!
南通市港闸市政工程有限公司
如皋市中央大道(益寿南路~海阳南路)工程项目经理部
2012年11月20日
第三篇:TCP 报头格式
TCP协议头最少20个字节,包括以下的区域
TCP源端口(Source Port):16位的源端口其中包含初始化通信的端口。源端口和源IP地址的作用是 标示报问的返回地址。
TCP目的端口(Destination port):16位的目的端口域定义传输的目的。这个端口指明报文接收计算 机上的应用程序地址接口。
TCP序列号(序列码,Sequence Number):32位
TCP应答号(Acknowledgment Number):32位的序列号由接收端计算机使用,重组分段的报文成最初形式。,如果设置了ACK控制位,这个值表示一个准备接收的包的序列码。
数据偏移量(HLEN):4位包括TCP头大小,指示何处数据开始。
保留(Reserved):6位值域,这些位必须是0。为了将来定义新的用途所保留。
标志(Code Bits):6位标志域。表示为:紧急标志、有意义的应答标志、推、重置连接标志、同步序列号标志、完成发送数据标志。按照顺序排列是:URG、ACK、PSH、RST、SYN、FIN。
1.URG:紧急标志
紧急(The urgent pointer)标志有效。紧急标志置位,2.ACK:确认标志
确认编号(Acknowledgement Number)栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure:1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。3.PSH:推标志
该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理 telnet 或rlogin 等交互模式的连接时,该标志总是置位的。4.RST:复位标志
复位标志有效。用于复位相应的TCP连接。5.SYN:同步标志
同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。6.FIN:结束标志
带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。
窗口(Window):16位,用来表示想收到的每个TCP数据段的大小。
校验位(Checksum):16位TCP头。源机器基于数据内容计算一个数值,收信息机要与源机器数值 结果完全一样,从而证明数据的有效性。
优先指针(紧急,Urgent Pointer):16位,指向后面是优先数据的字节,在URG标志设置了时才有效。如果URG标志没有被设置,紧急域作为填充。加快处理标示为紧急的数据段。
选项(Option):长度不定,但长度必须以字节。如果 没有 选项就表示这个一字节的域等于0。
数据(Date):应用程序的数据。
第四篇:自我剖析zy
自我剖析材料
这段时间通过《保持共产党先进性教育读本》的学习和学校组织的一些学习活动,以及回顾入党志愿,对照党员的八条义务,我才发现自己是那么的渺小,有好多的不足:
一、在思想上:
1、虽然能关心时事,关心国家大事,能积极参加学校党支部组织的一切学习活动,但是除了时事和国家大事,其余的学习是比较被动的,如:在下班后的空闲时间,我可能会上上网查找一些自己感兴趣的专业资料,不会主动去翻阅马克思列宁主义、毛泽东思想、邓小平理论和“三个代表”重要思想,主动去学习党的基本知识。
二、在作风上:
缺乏批评与自我批评的勇气,缺乏密切联系群众的精神。我们这一代人听过父辈讲过文化大革命的许多悲惨经历,看到了好多人下岗后的艰难生活,自己觉得已悟出了生活的艰辛,能体会和满足自己现在的生活,同时也深知流言蜚语的危害和“人言可畏”的结果,因而在工作中只是一味埋头干活,少有关心、关注他人,在同事中间、群众中间不敢评论和批评他人,即使自己有不同看法,也不在公众场合枉加菲薄,我的这种不诚实的做人方式使得我离群众越来越远,因为沟通少,群众不了解,遇事也就无法同群众商量。因为沟通少,也无法向党反映群众的意见和要求,更不用说维护群众的正当利益了。
三、在工作上:
自我为中心,缺乏全面系统的考虑问题。缺乏向周围老教师学习的精神,少一些钻研的精神,有惰性。
通过这次系统的学习,对照先进党员,剖析思想根源,我觉得我所存在的一系列问题,归根结底是放松了政治理论学习,放松了自己的思想改造,导致
在许多方面虽知道自己的不足。
通过学习,也使我明确了今后努力的方向:首先,要深刻理解“三个代表”重要思想,认认真真学习“三个代表”的思想精髓之所在,学习它分析问题、解决问题的方法之所在。这不是很容易做到的事,它不仅涉及理论而且涉及现实的实际。所以,我们作为新时期的共产党员不仅要有崇高的思想境界,而且还要有扎实的理论知识。要有自学的意识,不断的、主动的学习,不断的加深认识,不断的积累知识;要会提问题,针对问题学习,自己缺少什么补什么。其次,要身体力行“三个代表”,做“三个代表”有效的、科学的实践者。努力当好先进生产力发展要求的代表。要贯彻落实好“三个代表”重要思想,要脚踏实地地做好本职工作,在工作中,考虑问题三思而后行。要树立高度的责任和敬业精神,尽心尽力把工作做好。一切都要以党和人民利益为出发点,不能急功近利,更不能计较个人得失;要克服自己的缺点,做老实人,办老实事,对工作勤勤恳恳,求真务实、创新。
总之,我作为党员已明确了自己肩负的责任。我们正是处在一个历史转折时期,这是我们的骄傲,也是我们国家的骄傲。我们要审时度势,坚定信心,做好自己的本职工作,严格遵循新党章对我们的要求,抓住机遇,应对挑战,务实创新,始终站在时代发展的前列,解放思想,实事求是,与时俱进,为我们的共产主义事业而奋斗!
第五篇:网络工程师TCP协议簇总结
网络互联基础-TCP/IP协议族
1、物理层
机械特性:接口的型状,尺寸的大小,引脚的数目和排列方式等。
电气特性:接口规定信号的电压、电流、阻抗、波形、速率及平衡特性等。功能特性:接口引脚的意义、特性、标准。电压表示范围的含义。
过程特性:确定数据位流的传输方式,事件发生顺序。如:单工、半双工或全双工。物理层协议有:
美国电子工业协会(EIA)的RS232,RS422,RS423,RS485等;
国际电报电话咨询委员会(CCITT)的X.25、X.21等;
物理层的数据单位是位比特(BIT),典型设备是集线器HUB。
2、链路层
链路层屏蔽传输介质的物理特征,使数据可靠传送。
内容包括介质访问控制、连接控制、顺序控制、流量控制、差错控制和仲裁协议等。链路层协议有:
协议有面向字符的通讯协议(PPP)和面向位的通讯协议(HDLC)。
仲裁协议:802.3、802.4、802.5,即:
CSMA/CD(Carrier Sense Multiple Access with Collision Detection)、TokenBus、Token Ring
链路层数据单位是帧,实现对MAC地址的访问,典型设备是交换机Switch。
3、网络层
网络层管理连接方式和路由选择。
连接方式:虚电路(Virtual Circuits)和数据报(Datagram)服务。
虚电路是面向连接的(Connection-Oriented),数据通讯一次路由,通过会话建立的一条 通路。
数据报是非连接的(Connectionless-Oriented),每个数据报都有路由能力。网络层的数据单位是包,使用的是IP地址,典型设备是路由器Router。这一层可以进行流量控制,但流量控制更多的是使用第二层或第四层。
4、传输层
提供端到端的服务。可以实现流量控制、负载均衡。
传输层信息包含端口、控制字和校验和。
传输层协议主要是TCP和UDP。
传输层位于OSI的第四层,这层使用的设备是主机本身。
5、会话层
会话层主要内容是通过会话进行身份验证、会话管理和确定通讯方式。一旦建立连接,会话层的任务就是管理会话。
6、表示层
表示层主要是解释通讯数据的意义,如代码转换、格式变换等,使不同的终端可以表示。还包括加密与解密、压缩与解压缩等。
7、应用层
应用层应该是直接面向用户的程序或服务,包括系统程序和用户程序,例如www、FTP、DNS、POP3和SMTP等都是应用层服务。
从功能角度可分为三组,1、2层解决网络信道问题,3、4层解决传输问题,5、6、7层处理对应用进程的访问。
从控制角度可分为二组,第1、2、3层是通信子网层,第4、5、6、7层是主机控制层。
二、TCP/IP 协议簇
TCP/IP协议簇分为四层,IP位于协议簇的第二层(对应OSI的第三层),TCP位于协议簇的第三层(对应OSI的第四层)。
TCP和IP是TCP/IP协议簇的中间两层,是整个协议簇的核心,起到了承上启下的作用。
1、接口层
TCP/IP的最低层是接口层,常见的接口层协议有:
Ethernet 802.3、Token Ring 802.5、X.25、Frame reley、HDLC、PPP等。
2、网络层
网络层包括:IP(Internet Protocol)协议、ICMP(Internet Control Message Protocol)
控制报文协议、ARP(Address Resolution Protocol)地址转换协议、RARP(Reverse ARP)反向 地址转换协议。
IP是网络层的核心,通过路由选择将下一跳IP封装后交给接口层。IP数据报是无连接服务
ICMP是网络层的补充,可以回送报文。用来检测网络是否通畅。
Ping命令就是发送ICMP的echo包,通过回送的echo relay进行网络测试。
ARP是正向地址解析协议,通过已知的IP,寻找对应主机的MAC地址。
RARP是反向地址解析协议,通过MAC地址确定IP地址。比如无盘工作站和DHCP服务。
3、传输层
传输层协议主要是:传输控制协议TCP(Transmission Control Protocol)和用户数据报协 议UDP(User Datagram rotocol)。
TCP是面向连接的通信协议,通过三次握手建立连接,通讯时完成时要拆除连接,由于TCP是面向连接的所以只能用于点对点的通讯。
TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性。TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。
UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出丢包现象,实际应用中要求在程序员编程验证。
4、应用层
应用层一般是面向用户的服务。如FTP、TELNET、DNS、SMTP、POP3。
FTP(File Transmision Protocol)是文件传输协议,一般上传下载用FTP服务,数据端口 是20H,控制端口是21H。
Telnet服务是用户远程登录服务,使用23H端口,使用明码传送,保密性差、简单方便。DNS(Domain Name Service)是域名解析服务,提供域名到IP地址之间的转换。
SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,用来控制信件的发送、中转。POP3(Post Office Protocol 3)是邮局协议第3版本,用于接收邮件。
数据格式:
数据帧:帧头+IP数据包+帧尾(帧头包括源和目标主机MAC地址及类型,帧尾是校验字)
IP数据包:IP头部+TCP数据信息(IP头包括源和目标主机IP地址、类型、生存期等)IP数据信息:TCP头部+实际数据(TCP头包括源和目标主机端口号、顺序号、确认
号、校
验字等)
三、TCP连接的建立
1、TCP连接通过三次握手完成。
client首先请求连接,发一个SYN包;Server收到后回应SYN_ACK包;Client收到后再发ACK包。即:
ClientServer
SYN--->收
<---SYN_ACK
ACK--->收
established表示建立状态,当某端发出数据包后收到了回应则进入established状态。在TCP/IP连接时,如果两端都是established状态,则握手成功,否则是无连接或半联接状态。
2、套接字Socket
套接字Socket由协议、IP地址和端口号组成,套接字表示一路通讯,一般是一个服务,如www服务是TCP的80端口,Telnet是TCP的23端口。
四、IP地址划分
1、IP地址分类
IP地址有四个段,包括网络标识和主机标识两部分:netid+hostid。
IP地址应用分为A、B、C三类,D、E类是保留和专用的。
Class A0******* xxxxxxxx xxxxxxxx xxxxxxxx
Class B10****** ******** xxxxxxxx xxxxxxxx
Class C110***** ******** ******** xxxxxxxx
Class D1110**** ******** ******** ********
Class E1111**** ******** ******** ********
2、地址区间
址址类 地址区间网络数主机数
A 类 1.0.0.1~126.255.255.254 27-2=126 224-2=16777214
B 类 128.0.0.1~191.255.255.254 214-2=16382 216-2=65534
C 类 192.0.0.1~223.255.255.254 221-2=2097150 28-2=254
D 类 224.0.0.1~239.255.255.255 228=268435456 0
E 类 240.0.0.1~255.255.255.255 228=268435456 03、特殊地址
主机地址全0表示为一个网络地址。
主机地址全1表示为对应网络的广播地址。
全0的IP地址:0.0.0.0,表示本机地址,只在启动过程时有效。
全1的IP地址255.255.255.255,表示本地广播(有的软件不支持)。
私有地址:
10.0.0.0172.31.255.255
192.168.0.0-192.168.255.255
127.0.0.0网络是回环网络loopback,用于本机测试。例如:
ping 127.0.0.1 是测试本机网卡是否工作正常。
4、子网掩码
子网掩码用来区分网络地址和主机地址,标准的子网掩码为:
A 类: 1.0.0.1~126.255.255.254netmask:255.0.0.0
B 类:128.0.0.1~191.255.255.254netmask:255.255.0.0
C 类:192.0.0.1~223.255.255.254netmask:255.255.255.0
子网掩码和IP地址的“与”运算得出对应的网络地址。
如果将子网掩码“1”的位数增加则网络地址数增加,形成子网。相当于网络的分隔。如果将子网掩码“1”的位数减小则网络地址数减少,形成超网。相当于网络的聚合。