전송계층 프로토콜
- End to End 연결서비스 제공
- TCP - 연결형 서비스 – stream Data
- UDP -비 연결형 서비스 – Small Data
TCP 특징
- 연결형(Connection-Oriented)
- IP 계층 위에 가상의 회선을 설정
- 종단간 데이터 송수신 서비스 제공
- 신뢰성(Reliability)
- 확인을 통한 신뢰성 있는 통신서비스 제공
- 흐름제어(Flow Control)
- 혼잡 현상을 방지하거나 제어하는 기능
- 스트림 통신
- 데이터를 바이트 단위로 나눠서 전송
TCP 포트
- 프로세스를 구분
- 16비트로 표현( 0~65,535)
- 잘 알려진 포트(well-known port)와 임시 포트(ephemeral port)로 구분
- 잘 알려진 포트
- 응용 프로그램에 따라 정해진 포트
- 보통 서비스를 제공하는 서버에서 사용
- 범위 : 1~1,023
- 임시 포트
- 1024~65,535 값 중 운영체제로부터 할당 받음
- 서비스 사용 중에만 유효
- 시스템에 동작하는 TCP
- ① : 203.252.53.47 호스트의 임시 포트 2059
- ② : 211.50.255.226의 80번 포트인 HTTP로의 연결
- ③ : ①가 ②와 연결 성립
TCP 소켓
- TCP/IP 통신 인터페이스 중의 하나
- 소켓 주소 : <프로토콜, 로컬 IP주소, 로컬 프로세스 번호>
- 두 프로세스간에 전이중 바이트 스트림 연결 제공
- TCP 소켓 주소
TCP 헤더 포맷
- TCP 헤더 형식
- 소스 포트번호
- 세그먼트를 전송하는 응용 프로그램의 포트번호
- 목적지 포트번호
- 세그먼트를 수신하는 응용 프로그램의 포트번호
- 순서번호
- 데이터 스트림의 내부적인 순서를 구분
- 32비트의 부호 없는 번호
- 232-2 값을 초과하면 다시 0부터 시작
- 확인응답번호
- 앞으로 받고자 하는 바이트의 순서번호
- 헤더 길이
- 4바이트 단위로, 기본 헤더는 20 바이트
- 최대 길이는 60바이트
- 윈도우 크기
- 흐름 제어를 위해 사용
- 수신측은 수신 가능한 데이터 양을 바이트 단위로 송신측에 통지
- 16비트로 최대 크기는 65,636바이트
- 옵션 필드에 스케일 팩터(scale factor)를 이용하여 더 크게 지정 가능
- 체크섬(Checksum)
- TCP 헤더와 데이터에 수행
- 수신측에서 에러를 검출
- TCP 체크섬 범위
- 긴급포인터
- URG 플래그가 설정되어 있을 때만 유효
- 사용 목적은 주로 응용 프로그램에 달려 있음
- 송신측
- 먼저 전해져야 하는 데이터를 URG 플래그를 설정
- 긴급포인터로 긴급 데이터의 마지막을 지정하여 전송
- 수신측
- 긴급 포인터에 데이터까지 “긴급 모드(urgent mode)”로 응용 프로그램에 알림
- 긴급포인터에 사용의 예
- FTP 전송 중에 송신자가 <Ctrl+C>를 눌러 전송을 중지시켰을 경우
TCP 연결 및 해제
TCP 연결동작
- 능동적 열림(Active Open)
- 클라이언트 서버가 열고 있는 포트로 응용을 요청
- 보통 처음에 SYN을 보내는 쪽
- 수동적 열림(Passive Open)
- 보통 서버는 네트워크 응용을 수행하기 위해 정해진 포트를 열고 클라이언트의 요청을 기다림
- 서버 측면
① 서버는 CLOSE 상태에서 응용프로그램으로부터 수동적 열림 요청 시 LISTEN 상탱
② LISTEN 상태에서 클라이언트로부터 SYN를 받으면 이것에 대한 SYN와 ACK를 보내고 SYN RCVD 상태
③ 서버가 보낸 SYN에 대한 ACK가 오면 양방향 연경이 성립되어 ESTABLISTHED 상태
④ ESTABLISTHED 상태 중 클라이언트로부터 FIN을 받고 이것에 대한 확인응답을 보내면 CLOSE WAIT 상태
⑤ 서버의 응용 프로그램으로부터 연결 종료 요구를 받으면 클라이언트로 FIN을 보내고 LAST-ACK 상태
⑥ 서버의 연결 종료 요청에 대한 ACK를 클라이언트로부터 수신하면 모든 연결과정이 종료
- 클라이언트 측면
① 클라이언트는 응용 프로그램으로부터 능동적 열림을 받으면 SYN를 송신하고 SYN SENT 상태
② SYN SENT상태에서 서버로부터 SYN와 ACK를 받으면 이것에 대한 ACK를 송신하고 양방향 연결이 성립되어 ESTABLISTHED 상태
③ 연결 상태에서 응용 프로그램으로부터 연결 종료 요청을 받으면 서버에 FIN을 전송하고 FIN WAIT -1 상태
④ 서버로부터 FIN에 대한 ACK를 수신하면 서버의 FIN을 기다리는 FIN WAIT-2 상태
⑤ 서버로부터 FIN을 수신하면 이것에 대한 ACK를 송신하고 TIME WAIT 상태
⑥ 타임아웃 시간이 경과하면 연결이 종료되어 CLOSED 상태
- 비정상적인 종료를 요청 시
- 비정상적으로 종료를 해야 하는 경우 FIN 대신 RST 비트를 이용 연결 중단
- 클라이언트과 서버의 텔넷 연결 상태에서 클라이언트측의 텔넷 프로세스를 [ALT+E]하여 강제 종료
TCP 제어 절차
TCP 흐름제어
- 슬라이딩 윈도우(Sliding Window)
- 수신측에서 설정한 윈도우 크기만큼 송신측에서 확인응답 없이 전송할 수 있게 하여 흐름을 동적으로 조절하는 제어 기법
- TCP 송신윈도우 크기 : 수신측으로 부터 확인 응답 없이 전송할 수 있는 데이터의 크기
- 윈도우 크기 : 전송했으나 아직 확인응답 받지 못한 데이터 + 지연 없이 전송할 수 있는 데이터
- 송신 버퍼의 범위는 수신측의 여유 버퍼 공간 반영 동적으로 바뀜
- 비정상 윈도우 신드롬(Silly Window Syndrome)
- 슬라이딩 윈도우 사용에 있어 부적절한 결과
- 송신 응용프로그램이 전송하는 데이터 크기가 작은 경우
- 수신측의 처리 속도가 늦은 경우
- 1바이트의 데이터를 전송하기 위해 40바이트 프로토콜 헤더를 붙이게 되어 최악의 전송 효율을 나타냄
- Nagle 알고리즘
- 전송할 데이터를 어느 정도 모아 한 번에 전송
- Nagle 알고리즘에서 송신측은 다음의 경우에만 전송
- 응용 프로그램으로부터 받은 데이터가 최대 세그먼트 크기가 될 경우
- 수신측으로 부터 확인 응답을 받을 경우
- 타이머가 완료된 경우
- 네트워크와 응용 프로그램의 데이터 처리 요구를 동시에 고려
- 네트워크 속도가 빠르면 크기가 작은 세그먼트가 생기더라도 네트워크가 처리 가능
- 네트워크 속도가 늦은 경우 데이터를 모아서 전송하므로 네트워크에 불필요한 오버헤드를 줄일 수 있음
- Clark의 해결책
- 수신측 윈도우 크기가 0이 되었을 경우
- 윈도우가 최대 세그먼트 크기만큼 남았을 때 또는 버퍼의 여유 공간이 절반이 될 때 까지 수신 윈도우 크기를 계속 0으로 전송
- 지연 확인응답(Delayed Acknowledgment)
- 확인응답은 데이터와 함께 하나의 세그먼트에 전송하기 위해 지연될 수 있음
- 수신측은 여분의 버퍼 공간을 확보할 수 있게 됨
- 재전송을 증가시킬 수 있으므로 그 시간을 보통 200ms로 제한
- 지연된 확인응답의 예
- ⓑ : A는 B 정보의 확인응답을 보내기 전에 일정한 시간을 기다림
- ⓒ 타이머가 끝날 때 A는 확인응답만을 담은 패킷을 보내게 되어 확인 응답이 지연됨
TCP 재전송
- TCP 송신측은 수신측으로부터 긍정 확인응답만을 받음
- 확인응답 메시지를 받기 전에 타이머가 종료되면 해당 세그먼트가 손실되었거나 손상되었다고 가정하고 재전송
- 재전송 알고리즘은 전송시간이 네트워크 상황에 따라 매우 가변적이기 때문에 복잡
- 적응적(adaptive) 재전송 알고리즘을 사용
TCP 혼잡제어
- TCP세그먼트 수가 네트워크 장비의 큐 용량보다 더 많이 도착했을 때 큐는 오버플로우가 발생하게 되어 세그먼트를 폐기하는 상황을 혼잡이라 함
- 송신측과 수신측은 혼잡을 지연의 증가로써 인식하게 됨
- 혼잡으로 인한 전송 지연 때문에 세그먼트를 재전송한다면 혼잡을 더 악화
- TCP는 네트워크 혼잡 상황을 반영하기 위한 혼잡 윈도우를 사용
- TCP 전송은 혼잡 윈도우와 수신측 윈도우 크기 중 작은 값을 반영하여 조절
TCP persist 타이머
- 수신측으로부터 0의 윈도우 크기를 받은 경우에는, 수신측 버퍼에 여유가 생겨 윈도우 크기를 새로 전송할 때 까지
송신측의 전송이 중단
- 수신측으로부터 윈도우 크기를 나타내는 확인응답 세그먼트가 손실될 경우
- 송신측은 계속해서 수신측의 윈도우 크기를 0으로 간주하여 전송을 중단
- 수신측은 송신측이 보낼 데이터가 없다고 생각
- TCP persist 타이머는 이 경우를 방지하기 위해 사용
- TCP의 송신측은 수신측으로부터 0의 윈도우 크기를 받으면 Persist 타이머를 시작
- Persist 타이머가 타임아웃 되면
- 송신측은 한 바이트로 이루어진 탐색(probe) 세그먼트를 주기적으로 전송하여 수신측의 윈도우 크기를 파악
- 송신측은 윈도우 크기를 나타내는 세그먼트가 손실되었다 하더라도 대처
TCP Keepalive 타이머
- 일정기간 동안 데이터를 전송하지 않는 연결의 해제를 위해 TCP keepalive 타이머를 사용
- 클라이언트가 TCP 연결을 맺은 후 어떤 이유로 중지한 경우에도 TCP 서버쪽은 연결을 계속 유지
- 유휴 연결을 감지하기 위해 TCP는 각 연결에 대해 keepalive 타이머를 사용하고 타이머 종료마다 탐색 세그먼트를
전송
- 탐색 세그먼트에도 응답이 없을 때 서버는 TCP 연결을 종료
TCP Time-Waited 타이머
- TCP 연결 종료 세그먼트를 송신하였다고 해서 연결이 완전히 종료 된 것은 아님
- Time-waited 타이머 기간 동안 연결을 유지하여 중복된 FIN 세그먼트 처리
- 종료되는 연결의 잔여 세그먼트가 향후 생성될 연결을 영향을 미치는 것을 방지하기 위해 보통 세그먼트의 예상 생존시간의 두 배로 설정
UDP 프로토콜
UDP 특징
- 비연결형(Connectionless)
- VS. TCP는 데이터를 전송하기 전에 연결을 설정
- 비상태정보(Non-state)
- VS. TCP 종단 시스템에서는 각각의 연결에 대한 상태정보를 유지
- 비정규적인 송신률(Unregulated Send Rate)
- 일부 패킷 손실이 발생하더라도 지속적인 최소 전송률을 요구하는 실시간 영상서비스에 적합
- 최선형 서비스(Best Effort service)
- 수신확인 및 재전송 기능 無
- 작은 오버헤드
- TCP : 20byte
- UDP : 8byte
UDP 헤더
- 송신 포트번호
- 송신측 프로세스에서 사용되는 포트번호
- 수신 포트번호
- 수신측 프로세스에서 사용되는 포트번호
- 전체 길이
- 헤더 길이 + 사용자 데이터 그램의 전체 길이
- 체크섬
- 에러 검출을 위해 사용
UDP 포트
- 활성화되어 있는 포트 목록
- Netstat 명령어
- 특정 전송 제어 프로토콜 포트를 사용하거나 UDP 포트를 사용하는 프로그램을 확인하는 방법을 제공
UDP 동작
- 캡슐화/역캡슐화
- 캡슐화 : 전송할 데이터에 필요한 정보를 덧붙이는 과정
- 역캡슐화 : 캡슐화된 데이터의 정보를 하나씩 제거하여 순수한 데이터를 추출하는 과정
UDP SNMP동작 예
'네트워크' 카테고리의 다른 글
[네트워크] DNS (0) | 2023.03.21 |
---|---|
[네트워크] 라우팅 (0) | 2023.03.19 |
[네트워크] 모바일 IP (0) | 2023.03.18 |
[네트워크] IPv6 주소 (0) | 2023.03.17 |
[네트워크] IPv4 프로토콜 (0) | 2023.03.16 |