rdt 2.2 : NAK가 없는 rdt
rdt 2.1과 달리 NAK를 사용하지 않는다.
누적 ACK를 이용하여 패킷의 정상 수신 여부를 판단한다.
- 송신자는 이전까지 받은 ACK를 누적하여 어디까지 패킷이 정상 전달 되었는지 알 수 있다.
sender tcp 통신과정
1. 0번 패킷을 보내기 위해 APP로부터 data를 기다린다.
2. 이벤트 : data를 APP로부터 전송받았다.
액션 : 시퀀스 넘버 0과 data, 체크섬을 담아 패킷을 만든다.
IP에게 0번 패킷을 전송한다.
IP로부터 0번 ACK를 받기를 대기하는 상으로 변경된다.
3. IP로부터 0번 ACK를 받기를 대기한다.
4. 이벤트 : IP로부터 받은 패킷이 손상되었거나 1번 ACK를 받았다
액션 : 다시 IP에게 0번 패킷을 전송한다.
IP로부터 0번 ACK를 받기를 대기하는 상을 유지한다.
5. 이벤트 : IP로부터 손상되지 않은 0번 ACK를 받았다.
액션 : 별도의 액션은 없다. 1번 패킷을 보내기 위해 APP로부터 data를 기다리는 상으로 변경된다.
receiver tcp 통신과정
1. 1번 패킷을 IP로부터 기다린다.
2. 이벤트 : IP로부터 손상되지 않은 1번 패킷을 받았다.
액션 : 패킷에서 data를 추출한다.
data를 APP에게 전송한다.
1번 ACK와 체크섬을 담아 패킷을 만든다.
IP에게 1번 ACK패킷을 보낸다.
IP로부터 0번 패킷을 받기를 대기하는 상으로 변경된다.
3. 0번 패킷을 IP로부터 대기한다.
4. 이벤트 : IP로부터 받은 패킷이 손상되었거나 1번 패킷을 받았다.
액션 : IP에게 1번 ACK패킷을 다시 보낸다.
0번 패킷을 IP로부터 대기하는 상을 유지한다.
rdt 3.0 : 채널에 error나 loss가 가능(패킷 소실)
하위 채널에 패킷이 없어지는 경우를 상정한다.
타이머 기능을 추가하여 패킷을 보냄과 동시에 타이머를 설정한다. 적정 시간은 RTT보다 살짝 넉넉한 정도이다.
ACK를 기다리는 동안 타임아웃이 될 시 무조건 재전송한다.
이때 타임아웃 시에만 재전송을 하고 나머지 상황에 대해서는 재전송하지 않는다.
재전송으로 인한 중복 발생 가능성이 있으나 이미 이전에 중복에 대한 처리 방안이 마련되었으므로 문제는 없다.
1. 0번 패킷을 보내기 위해 APP로부터 data를 기다린다.
2. 이벤트 : data를 APP로부터 전송받았다.
액션 : 시퀀스 넘버 0과 data, 체크섬을 담아 패킷을 만든다.
IP에게 0번 패킷을 전송한다.
타이머를 작동시킨다.
IP로부터 0번 ACK를 받기를 대기하는 상으로 변경된다.
3. IP로부터 0번 ACK를 받기를 대기한다.
4. 이벤트 : IP로부터 받은 패킷이 손상되었거나 1번 ACK를 받았다.
액션 : 별도의 액션은 없다. IP로부터 0번 ACK를 받기를 대기하는 상을 유지한다.
5. 이벤트 : 타임아웃되었다.
액션 : 다시 IP에게 0번 패킷을 전송한다.
타이머를 작동시킨다.
6. 이벤트 : IP로부터 손상되지 않은 0번 ACK를 받았다.
액션 : 메모리에 있던 sndpkt을 버림으로써 타이머를 멈춘다.
0번 패킷을 보내기 위해 APP로부터 data를 기다리는 상으로 변경된다.
7. 1번 패킷을 보내기 위해 APP로부터 data를 기다린다.
8. 이벤트 : IP로부터 응답 패킷을 받았다.
액션 : 별도의 액션은 없다. 1번 패킷을 보내기 위해 APP로부터 data를 기다리는 상을 유지한다.
파이프라인 프로토콜 (Pipelined protocol)
기존의 stop –and ‐wait 방식은 패킷 하나 하나의 전송을 확인하므로 전체 패킷의 전송 속도가 느리다. 이를 개선하기 위해 파이프라이닝 프로토콜이 제안된다.
Pipelining : ACK를 기다리지 않고 여러 개의 패킷을 전송하도록 허용하는 것이다.
여러 패킷을 전송하므로 시퀀스 넘버의 범위는 증가된다. (32bit)
RTT : 패킷이 한번 전송되고 다음 패킷을 전송하기까지의 시간이다.
윈도우사이즈 : RTT내에 보내는 패킷의 양이다.
윈도우 사이즈를 너무 늘려 지연/혼잡 발생 시 이를 감지하고 사이즈를 줄인다. 때문에 사이즈가 정해져 있지 않다.
결국 윈도우 사이즈는 곧 그 네트워크의 퍼포먼스를 나타낸다.
퍼미션
suid, sgid
보통의 경우 파일이 실행된 프로세스는 실행한 사용자 소유로 실행 권한이 부여된다.
suid, sgid를 설정한 파일의 프로세스는 파일 소유자나 그룹 소유자의 ID로 실행된다.
이 설정은 실행 파일에만 적용되며 실행 권한에 s로 명시된다.
suid : 4000 : u+s
sgid : 2000 : g+s
sticky bit
파일에 대해서 퍼미션과 관계없이 소유자만 삭제 가능하게 할 때 디렉토리의 other부분 권한을 설정한다.
모든 권한 허가가 가능하지만 삭제는 소유자만 가능하다.
실행권한에 t로 명시된다.
1000 : o+t
7777 : rwsrwsrwt
4777 : rwsrwxrwx (u+s)
2777 : rwxrwsrwx (g+s)
1777 : rwxrwxrwt (o+t)
● chown, chgrp
소유자 또는 그룹 소유자를 변경한다.
# chown [‐R] [유저명] [대상] : 소유자를 변경한다.
# chgrp [‐R] [그룹명] [대상] : 그룹 소유자를 변경한다.
위의 둘을 한번에 처리하려면 다음과 같다.
# chown [‐R] [유저명].[그룹명] [대상]
● umask
파일이 생성될 때 퍼미션 중에 제외될 퍼미션을 지정한다.
기본 umask는 022(0022)로 설정되어있다.
- 디렉토리 퍼미션 : 755(0755)
- 파일 퍼미션 : 644(0644)
# umask [제외할 퍼미션] - ex) # umask 077(0077)
/etc/profile, ~/.bash_profile을 이용해서 변경 가능하다.
/etc/profile을 설정하면 모든 사용자에게 적용 되며 ~/.bash_profile(각 계정 밑의 배시 프로파일)을 설정하면 해당 사용자만 적용된다.
기존 파일은 >를 이용해 파일을 변경하더라도 umask 설정대로 퍼미션이 변경되지 않으므로 삭제 후 재생성해야 한다.
파일의 속성
● 파일 시스템 특성을 고려한 파일의 특성
a : 추가 모드로만 오픈 가능하게 한다. root만 속성 변경이 가능하다.
i : 변경, 삭제, 링크를 금지시킨다. root조차 행위를 할 수 없다.
A : atime(accesstime) 갱신을 금지시킨다.
d : dump 명령으로 백업을 금지시킨다.
S : 파일 수정 시 실시간 동기화한다.
D : 디렉토리를 실시간 동기화한다.
j : 저널링 기능으로 컴퓨터를 킬 때 저장되지 않은 데이터를 불러와준다.
t : 블록 절편화 현상(블록을 넣을 공간이 충분한데도 쪼개서 넣는 현상)이 발생하지 않는다.
s : 등록정보 뿐만 아니라 파일의 내용을 덮어 씌워 안전한 삭제를 해준다. 우리는 지원되지 않는다.
u : 삭제 시 내용을 저장한다.
c : 커널에 의해서 압축 상태로 저장한다. 지원되지 않는다.
● lsattr
파일의 속성을 확인한다.
# lsattr [옵션] [대상]
‐d : 파일 형식으로 출력한다.(대상이 디렉토리인 경우 사용한다.)
‐R : 하위의 모든 파일에 대한 속성을 표시한다.
‐a : 숨김 파일을 출력한다.
● chattr
파일의 속성을 변경한다.
# chattr [속성연산] [옵션] [대상]
+ : 속성을 추가한다.
- : 속성을 삭제한다.
= : 해당 속성만 갖도록 설정한다.(이외의 속성은 삭제한다.)
‐R : 하위의 모든 파일에 대한 속성을 변경한다.
'일일 정리' 카테고리의 다른 글
HTML/PHP 변수/데이터 타입, 연산자 (0) | 2025.01.19 |
---|---|
Go-Back-N 프로토콜, 파일 시스템과 파티션 (0) | 2025.01.16 |
UDP checksum, 신뢰적 데이터 전송, 리눅스 사용자 관리 관련 명령어, 리눅스 파일 구조 (1) | 2025.01.14 |
ICMP, ARP/RARP, 전송계층(Transport Layer) 서비스 개요, 다중화( Multiplexing )와 역다중화( demultiplexing ), UDP, 리눅스 사용자 관리 관련 명령어 (7) | 2025.01.13 |
VLSM, NAT, HTML (Hyper Text Markup Language) (4) | 2025.01.11 |