포트
4계층은 서비스를 구분해주는 역할을 한다.
이때 서비스 구분을 하기위해 포트 번호를 사용한다.
포트번호는 0번부터 65535번까지 존재하며,
맨 앞 0 ~1023번 포트를 well known port라고 한다.
well known 포트는 대중화된 서비스를 위해 예약된 포트번호이며
HTTP -> 80, TELNET -> 23, SSH -> 22 , HTTPS -> 443과 같이 대중적인 서비스들을 미리 번호로 예약해놓은 것이다.
해당 서비스들은 Windows에서는 C:\windows\system32\drives\etc\services 에서 확인이 가능하며
Linux에서는 /etc/services에서 확인이 가능하다.
1024번부터 49151번 포트는 registered 포트라고 한다. 해당 포트들은 시스템(OS)에서 서비스를 위해 미리 지정해둔 포트이다.
나머지 49151번 부터 65535번까지가 자유롭게 사용되는 포트이다.
TCP/UDP
TCP는 기본적으로 상대방이 패킷을 받았는지 확인을 한다.
내가 패킷을 보내면 상대방이 패킷을 받았는지 확인 만약 상대방이 못받았을 시 다시 패킷을 보내며 상대방이 받았는지를 확인하는 과정을 거친다.
실제 데이터는 1번 전송되지만 통신은 2번 이상하는 이루어진다.
반대로 UDP는 상대방이 패킷을 받았는지 유무를 확인하지 않고 전송한다.
TCP가 신뢰성있는 프로토콜인 이유는 3way handshake 방식을 사용하기 때문이다.
client와 server가 있다고 가정해보면
1. 처음 client가 통신을 요청한다. flag는 보내는 데이터의 유형, 종류를 나타낸다. SYNC는 세션을 연결한다는의미이다.
client -----------------------------------> server
(flag:SYNC)
2. 해당 통신을 받은 server는 알았다는 의미의 ACK와 너는 통신 준비가 되었냐는 의미의 SYNC를 같이 보낸다.
client <----------------------------------- server
(flag:ACK, SYNC)
3. 데이터를 받은 client는 통신이 가능하다는 의미로 다시 SYNC를 보낸다.
client -----------------------------------> server
(flag:SYNC)
이와 같이 세번의 통신과정을 거친 후 신뢰관계가 형성되어 데이터를 전송/수신이 가능하다.
통신 종료시 역시 4way handshake를 사용한다.
1. client가 server에게 통신 종료를 요청한다.
client -----------------------------------> server
(flag:FIN)
2. server가 알았다고 다시 전송한다.
client <----------------------------------- server
(flag:ACK)
3. client는 통신을 종료하겠다는 의미로 FIN을 보낸다.
client -----------------------------------> server
(flag:FIN)
4. 마지막으로 server는 알았다고 ACK를 보내면 통신이 종료된다.
client <----------------------------------- server
(flag:SYNC)
TCP header
TCP 방식은 매우 복잡해서 헤더도 위와 같이 복잡하게 이루어져있다.
source port와 destination port: 출발지와 목적지 포트 번호를 나타낸다.
sequence number: 데이터 분할 전송이 순서 표기 역할을 한다.
acknowledgement number: 데이터의 수신 여부를 확인한다.(오류 제어를 위해 존재)
window: 받을 수 있는 데이터 량을 확인한다.(흐름 제어를 위해 존재)
checksum: 오류 검출 코드
flags: reserved 옆에 각각 URG, ACK, PSH, RST, SYN, FIN이 flag를 나타낸다. flag는 앞서 말했듯이 데이터의 상태, 유형을 나타낸다.
-ACK: 확인/응답 데이터
-PSH: 상위 계층에 데이터 전송하도록 요청
-SYN: 세션 연결
-RST: 비 정상적인 종료, 종료 시 세션 재설정, 신뢰관계 재설정 등을 나타낸다. 해당 flag는 상대방이 응답 할 필요가 없다.
-FIN: 세션 종료를 나타낸다.(정상적인 종료)
-URG: 긴급데이터를 나타낸다.
urgent pointer: 앞서 flag에 긴급데이터인지를 나타냈다면, urgent pointer에서 긴급 데이터의 위치를 파악 할 수 있다,
UDP heaer
UDP는 사실 상 4계층에서 투명하게( 4계층이 거의 안보이도록??) 전송할 때 사용해서 헤더 또한 매우 간단하다.
출발지/목적지 포트와, 헤더길이 그리고 checksum을 통한 오류 검출로 이루어져 있다.
'네트워크 > 네트워크 기초이론' 카테고리의 다른 글
Network Devices (0) | 2018.07.14 |
---|---|
network Layer(3계층)-ICMP/ARP (0) | 2018.07.14 |
network Layer(3계층)-IP(네트워크와 호스트/서브넷마스크/클래스/서브넷팅/IP헤더) (1) | 2018.07.12 |
data-link Layer(2계층)-토폴로지/이더넷/토큰링 (0) | 2018.07.11 |
Physical Layer(1계층)-데이터 동기화/대역폭/케이블 (0) | 2018.07.09 |