- HTTP: 웹을 지원하기 위한 프로토콜 HTML문서를 주고 받으며 현재는 HTTP3까지 나옴
- DNS: 도메인 이름을 IP주소로 변환해주는 일을 담당
- Telnet: 원격지에 있는 장비로 표준 터미널 에뮬레이션 기능을 제공, 텔넷을 통해 원격지에서 네트워크 장비를 설정함
- FTP: 연결지향적인 방식으로 파일을 전송하고 수신하는 프로토콜
- SMTP: 컴퓨터 네트워크를 통해 전자 메일을 전달하는 프로토콜
Transport(전송계층)
○ 호스트간의 메시지 단위의 정보교환 및 관리를 담당
○ 대표적인 프로토콜로 TCP/UDP가 있다.
1. TCP
TCP는 신뢰성 전송을 하기 때문에 연결을 생성하고 종료하는 순간에도 신뢰성 확보를 위해 hand-shacke라는 과정을 거친다.
가. 특징
○ 연결지향의 신뢰성 있는 프로토콜
○ 윈도우를 이용한 흐름제어와 순서번호와 승인번호(ACK)를 이용한 에러제어를 한다.
○ 장점은 세그먼트의 전달이 보장된다는 것이며, 단점을 연결을 위한 초기 설정 시간이 걸린다.
○ TCP의 PDU는 Segment로 애플리케이션의 메시지를 순차적으로 분할하고 데이터가 전후 상관 관계가 고려되어 있다는 의미에서 Segment 라는 용어를 사용한다고 한다.
나. TCP Header
TCP 헤더가 뭐냐?
각 프로토콜은 각자 맡은 역할이 있고 보내고자하는 데이터에 *헤더를 씌워서 데이터를 전송한다.
TCP는 데이터를 신뢰성있고 순서에 맞게 보내는 역할을 가지고 있는데 그 역할을 수행하기 위한 정보들을 TCP 헤더에 담는다.
*인캡슐레이션이라고 하는데 다음에 다뤄보겠다.
TCP기본헤더값은 20byte이며 옵션에 따라 최대 60byte까지 늘어난다.
-> 20byte안에 어떤 정보들이 담겨있을까?
TCP 헤더값
○ Source port(발신지 포트 주소)
- 출발지 포트번호
○ Destination port(목적지 포트 주소)
- 목적지 포트번호
○ Sequence Number
- 데이터가 잘 전송되는지를 보장하기 위해 들어가는 필드로, 전송되는 세그먼트의 순서번호
○ Acknowledgment Number
- 통신상대가 발송한 패킷을 받았다는 것을 상대에게 확인해주는 번호로 수신한 마지막 byte 순서번호에서 1을 더함
○ Header Length
- TCP 헤더의 크기를 나타내는 것으로 4byte단위이다.
○ Flags
- URG: Urgent Ponter가 유효함을 표시
- ACK: Acknowledgment Number가 유효함을 표시
- PSH: 수신자는 패킷데이터를 최대한 응용프로그램에서 전달할 것을 지시함(버퍼에 모아두지말고 다 보내라는 뜻)
- PST: 연결을 리셋하도록 지시
- SYN: 연결의 시작을 나타내기 위해 사용
- FIN: 연결을 종료하도록 지시
○ Window Size
- 상대편 장비에게 얼만큼의 데이터를 보내도 되는지를 알려주는 필드
○ Checksum
- TCP 헤더와 데이터 필드에 대한 계산된 체크섬으로 에러 여부를 체크함
○ Urgent Pointer
- URG flag가 On되어 있을 경우에만 유효(전송 데이터 중 긴급한 데이터의 위치 선정)
○ Option
- 현재 정의되어 있는 옵션으로 최대 40byte까지 추가할 수 있다.
○ TCP data
- TCP 윗단에서 내려온 데이터
wireshark를 통해 TCP헤더가 진짜 그렇게 구성되어 있나 보자
헤더 크기를 보면 기본헤더값인 20byte이며 위에서부터 순서대로 보면 Source port, Destination port, Sequence Number, Acknowledgment Number, Header Length, Flags, Window Size, Checksum, Urgent Pointer가 표시되는 것을 볼 수 있다.
다. TCP 전송 과정
연결 생성, 연결 유지 및 전송, 연결 종료로 나눠서 보도록 하자
3-way handshake(연결 시작)
데이터를 전송하기에 앞서 상대방과의 회선을 위해 연결하는 과정을 거친다.
CLOSE
아무런 연결도 없는 상태이다
LISTEN
HostB가 HostA의 연결 요청을 기다리는 상태
SYN_SENT
HostA가 HostB에게 연결요청하면서 랜덤한 시퀀스번호를 담아 SYN을 보냄
SYN_RCVD
HostB가 HostA가 보낸 SYN를 제대로 받은 상태
이후 HostB는 HostA에게 제대로 받았다고 Acknowledgment Number(요청자가 보낸 시퀀스번호+1)를 보낸다.
-> 이게 SYN+ACK
ESTABLISHED
HostB에게 SYN/ACK를 받으며 제대로 연결되었다고 판단하고 응답으로 HostB에게 ACK를 보내고 HostA는 연결상태에 들어간다.
HostA에게 ACK를 받은 HostB는 제대로 연결되었다고 판단하고 연결상태에 들어간다.
1) HostA가 LISTEN상태의 HostB에게 SYN를 보내면
2) HostB는 HostA가 보낸 SYN과 함께 ACK를 보낸다
3) HostB에게 응답(SYN/ACK)을 받은 HostA는 연결이 되었다고 생각하고 HostB에게 ACK를 보내면서 둘다 연결상태가 된다.
연결 유지 /데이터 전송
TCP는 데이터를 보낼 때 상대방이 보낸 시퀀스번호 + 데이터를 합쳐서 승인번호를 만들어 전송한다
연결 종료(4-way handshake)
앞서 말한거처럼 TCP는 신뢰성 확보를 위해 연결 종료 시에도 Handshake를 진행한다.
갑자기 끊어버리면 신뢰성을 중요시하는 TCP가 온전히 데이터를 다 보냈는지 모르기 때문에 종료도 안전하게 종료한다.
1) 전송할 데이터를 모두 전송했으면 HostA는 HostB에게 FIN을 전송한다(회선해지요청)
2) HostB는 FIN을 받고 받았다는 것을 응답하기 위해 ACK(시퀀스번호+1)를 HostA에게 보낸다
-> 이렇게 되면 HostA->HostB 전송은 종료된다 (회선해지응답)
-> 하지만 HostB -> HostA 전송은 가능하기에 Half Close라고 부른다.
3) HostB가 필요한 데이터 전송을 완료 후 회선을 종료해도 되면 HostA에게 FIN을 전송한다(회선해지요청)
4)HostA가 수신을 받고 HostB에게 ACK를 전송하면 연결이 종료된다.
※ 비정상적인 중단 해제
위에 설명한것처럼 늘 안전하게 연결이 종료되는 것은 아니다. 존재하지 않는 포트에 연결을 요구할 때나 연결요구가 도착할 때 목적지 포트에 프로세스가 대기하지 않는 경우 등 비정상적인 종료가 진행된다.
HostA나 HostB 중 오류나 긴급한 문제로 TCP를 종료해야할 경우 RST를 생성하여 상대편에 전송하면 회선종료 절차를 준수하지 않고 즉시 회선을 해지한다.
-> FIN이 아닌 RST를 보낸다.
2. UDP
○ 비연결형 전송과 빠른 전송을 제공하는 프로토콜
○ TCP와 다르게 신뢰성이 없는 프로토콜
○ UDP의 전송 단위는 Datagram, 데이터크기가 간단하다.
- UDP 헤더 크기는 총 8byte다.
- 헤더값은 [ sourse port(2byte) + Destination port(2byte) + Length(2byte) + Checksum(2byte) ]으로 되어 있다
-wireshark를 통해 UDP를 보면 8byte와 4개의 헤더값, 값당 2byte가 찍히는 걸 볼 수 있다.
TCP와 UDP의 차이점
TCP
UDP
- 연결지향형 전송 - 신뢰성 전송(세그먼트의 전달이 보장) - unicast - 데이터 전송 - Full Duplex - 오류제어, 흐름제어 수행 - 연결을 위한 초기 설정 시간이 걸림
- 비연결형 전송 - 빠른 전송 - unicast/broadcast/multicast - 대량 멀티미디어, 실시간 전송, 게임 등에 적합 - Half Duplex - 오류제어,흐름제어 x -
Switch(config-if-range)#channel-group 1 mode active
3. 이더채널 확인
Switch#show etherchannel sum
한쪽 스위치만 설정했기에 Stand-alone상태라고 표시된다.
4. 반대쪽 스위치도 2번처럼 etherchannel을 설정해준다
5. 이더채널 확인
Switch#show etherchannel sum
2개의 스위치가 모두 설정이 되었으면 in port-cahnnel 상태가 된 것을 볼 수 있다.
6. Blocking-Port없이 모두 초록불이 들어왔다.
3. 실습하며 알아보기
앞서 알아본 것들을 토대로 아래의 네트워크 환경을 조건에 맞게 구축해보자
구성조건
1. Etherchannel구성 2. RSTP로 변경 3. vlan 100, vlan 200 생성 4. part A는 vlan 100멤버 part b는 vlan 200멤버 5. trunk 설정(802.1q-LACP) 6. DSW1 vlan 100의 root-bridge DSW2 vlan 200의 root-bridge 7. part_A통신 확인 part_B 통신 확인
1. Etherchannel구성
Switch>en
Switch#conf t
Switch(config)#int range f0/3, f0/5
Switch(config-if-range)#channel-protocol lacp
Switch(config-if-range)#channel-group 1 mode active